mirror of
https://github.com/Shopify/liquid.git
synced 2026-10-03 00:55:11 -07:00
fix variable lookup parse timing out with missing closing bracket
This commit is contained in:
+1
-1
@@ -41,7 +41,7 @@ module Liquid
|
|||||||
AnyStartingTag = /#{TagStart}|#{VariableStart}/o
|
AnyStartingTag = /#{TagStart}|#{VariableStart}/o
|
||||||
PartialTemplateParser = /#{TagStart}.*?#{TagEnd}|#{VariableStart}.*?#{VariableIncompleteEnd}/om
|
PartialTemplateParser = /#{TagStart}.*?#{TagEnd}|#{VariableStart}.*?#{VariableIncompleteEnd}/om
|
||||||
TemplateParser = /(#{PartialTemplateParser}|#{AnyStartingTag})/om
|
TemplateParser = /(#{PartialTemplateParser}|#{AnyStartingTag})/om
|
||||||
VariableParser = /\[(?:[^\[\]]+|\g<0>)*\]|#{VariableSegment}+\??/o
|
VariableParser = /\[(?>[^\[\]]+|\g<0>)*\]|#{VariableSegment}+\??/o
|
||||||
|
|
||||||
RAISE_EXCEPTION_LAMBDA = ->(_e) { raise }
|
RAISE_EXCEPTION_LAMBDA = ->(_e) { raise }
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
require 'timeout'
|
||||||
|
|
||||||
class VariableTest < Minitest::Test
|
class VariableTest < Minitest::Test
|
||||||
include Liquid
|
include Liquid
|
||||||
@@ -169,4 +170,30 @@ class VariableTest < Minitest::Test
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_variable_lookup_should_not_hang_with_invalid_syntax
|
||||||
|
Timeout.timeout(1) do
|
||||||
|
assert_template_result(
|
||||||
|
'bar',
|
||||||
|
"{{['foo'}}",
|
||||||
|
{
|
||||||
|
'foo' => 'bar',
|
||||||
|
},
|
||||||
|
error_mode: :lax,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
very_long_key = "1234567890" * 100
|
||||||
|
|
||||||
|
Timeout.timeout(1) do
|
||||||
|
assert_template_result(
|
||||||
|
'bar',
|
||||||
|
"{{['#{very_long_key}'}}",
|
||||||
|
{
|
||||||
|
very_long_key => 'bar',
|
||||||
|
},
|
||||||
|
error_mode: :lax,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user