diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index 1723fa0dd77..46dbfea1b17 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -1,3 +1,5 @@ +require 'set' + # Convertible provides methods for converting a pagelike item # from a certain type of markup into actual content # @@ -86,6 +88,8 @@ def do_layout(payload, layouts) # recursively render layouts layout = layouts[self.data["layout"]] + used = Set.new([layout]) + while layout payload = payload.deep_merge({"content" => self.output, "page" => layout.data}) @@ -95,7 +99,13 @@ def do_layout(payload, layouts) puts "Liquid Exception: #{e.message} in #{self.data["layout"]}" end - layout = layouts[layout.data["layout"]] + if layout = layouts[layout.data["layout"]] + if used.include?(layout) + layout = nil # avoid recursive chain + else + used << layout + end + end end end end