mirror of
https://github.com/Shopify/liquid.git
synced 2026-10-03 09:05:13 -07:00
Disallow number and dash identifier prefixes
This commit is contained in:
+1
-1
@@ -13,7 +13,7 @@ module Liquid
|
|||||||
'?'.freeze => :question,
|
'?'.freeze => :question,
|
||||||
'-'.freeze => :dash
|
'-'.freeze => :dash
|
||||||
}
|
}
|
||||||
IDENTIFIER = /[\w-]+\??/
|
IDENTIFIER = /[a-zA-Z_]+[\w-]*\??/
|
||||||
SINGLE_STRING_LITERAL = /'[^\']*'/
|
SINGLE_STRING_LITERAL = /'[^\']*'/
|
||||||
DOUBLE_STRING_LITERAL = /"[^\"]*"/
|
DOUBLE_STRING_LITERAL = /"[^\"]*"/
|
||||||
NUMBER_LITERAL = /-?\d+(\.\d+)?/
|
NUMBER_LITERAL = /-?\d+(\.\d+)?/
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ module Liquid
|
|||||||
#
|
#
|
||||||
class Variable
|
class Variable
|
||||||
FilterParser = /(?:\s+|#{QuotedFragment}|#{ArgumentSeparator})+/o
|
FilterParser = /(?:\s+|#{QuotedFragment}|#{ArgumentSeparator})+/o
|
||||||
EasyParse = /\A *(\w+(?:\.\w+)*) *\z/
|
|
||||||
attr_accessor :filters, :name, :warnings
|
attr_accessor :filters, :name, :warnings
|
||||||
attr_accessor :line_number
|
attr_accessor :line_number
|
||||||
include ParserSwitching
|
include ParserSwitching
|
||||||
@@ -53,13 +52,6 @@ module Liquid
|
|||||||
end
|
end
|
||||||
|
|
||||||
def strict_parse(markup)
|
def strict_parse(markup)
|
||||||
# Very simple valid cases
|
|
||||||
if markup =~ EasyParse
|
|
||||||
@name = Expression.parse($1)
|
|
||||||
@filters = []
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
@filters = []
|
@filters = []
|
||||||
p = Parser.new(markup)
|
p = Parser.new(markup)
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ class LexerUnitTest < Minitest::Test
|
|||||||
def test_fancy_identifiers
|
def test_fancy_identifiers
|
||||||
tokens = Lexer.new('hi five?').tokenize
|
tokens = Lexer.new('hi five?').tokenize
|
||||||
assert_equal [[:id, 'hi'], [:id, 'five?'], [:end_of_string]], tokens
|
assert_equal [[:id, 'hi'], [:id, 'five?'], [:end_of_string]], tokens
|
||||||
|
|
||||||
|
tokens = Lexer.new('2foo').tokenize
|
||||||
|
assert_equal [[:number, '2'], [:id, 'foo'], [:end_of_string]], tokens
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_whitespace
|
def test_whitespace
|
||||||
|
|||||||
@@ -108,6 +108,8 @@ class VariableUnitTest < Minitest::Test
|
|||||||
|
|
||||||
with_error_mode :strict do
|
with_error_mode :strict do
|
||||||
assert_raises(Liquid::SyntaxError) { Variable.new('foo - bar') }
|
assert_raises(Liquid::SyntaxError) { Variable.new('foo - bar') }
|
||||||
|
assert_raises(Liquid::SyntaxError) { Variable.new('-foo') }
|
||||||
|
assert_raises(Liquid::SyntaxError) { Variable.new('2foo') }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user