Merge pull request #486 from Shopify/fix-exponential-warnings

Fix #warnings taking exponential time to compute
This commit is contained in:
Justin Li
2014-11-12 17:22:16 -05:00
2 changed files with 12 additions and 1 deletions

View File

@@ -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

View File

@@ -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!