diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index 14a3696..5e8a965 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -62,7 +62,7 @@ module Liquid def warnings all_warnings = [] nodelist.each do |node| - all_warnings.concat(node.warnings) if node.respond_to?(:warnings) && node.warnings + all_warnings.concat(node.warnings || []) if node.respond_to?(:warnings) end all_warnings end diff --git a/test/integration/template_test.rb b/test/integration/template_test.rb index 9a4c979..e395206 100644 --- a/test/integration/template_test.rb +++ b/test/integration/template_test.rb @@ -1,4 +1,5 @@ require 'test_helper' +require 'timeout' class TemplateContextDrop < Liquid::Drop def before_method(method) @@ -37,6 +38,16 @@ class TemplateTest < Minitest::Test assert_equal 'from instance assigns', t.parse("{{ foo }}").render! end + def test_warnings_is_not_exponential_time + str = "false" + 100.times do + str = "{% if true %}true{% else %}#{str}{% endif %}" + end + + t = Template.parse(str) + assert_equal [], Timeout::timeout(1) { t.warnings } + end + def test_instance_assigns_persist_on_same_template_parsing_between_renders t = Template.new.parse("{{ foo }}{% assign foo = 'foo' %}{{ foo }}") assert_equal 'foo', t.render!