avoid infinite recursion while rendering layouts
This commit is contained in:
parent
f808c98232
commit
22585d4b7f
|
@ -1,3 +1,5 @@
|
||||||
|
require 'set'
|
||||||
|
|
||||||
# Convertible provides methods for converting a pagelike item
|
# Convertible provides methods for converting a pagelike item
|
||||||
# from a certain type of markup into actual content
|
# from a certain type of markup into actual content
|
||||||
#
|
#
|
||||||
|
@ -86,6 +88,8 @@ module Jekyll
|
||||||
|
|
||||||
# recursively render layouts
|
# recursively render layouts
|
||||||
layout = layouts[self.data["layout"]]
|
layout = layouts[self.data["layout"]]
|
||||||
|
used = Set.new([layout])
|
||||||
|
|
||||||
while layout
|
while layout
|
||||||
payload = payload.deep_merge({"content" => self.output, "page" => layout.data})
|
payload = payload.deep_merge({"content" => self.output, "page" => layout.data})
|
||||||
|
|
||||||
|
@ -95,7 +99,13 @@ module Jekyll
|
||||||
puts "Liquid Exception: #{e.message} in #{self.data["layout"]}"
|
puts "Liquid Exception: #{e.message} in #{self.data["layout"]}"
|
||||||
end
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue