From b140e91d8e2f51b20fb8c1e08e1f64ae8cbb157d Mon Sep 17 00:00:00 2001 From: Dylan Thacker-Smith Date: Thu, 30 Jul 2015 22:50:34 -0400 Subject: [PATCH] Don't allow identifiers to end in a dash in strict parse mode. --- lib/liquid/lexer.rb | 2 +- test/unit/lexer_unit_test.rb | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/liquid/lexer.rb b/lib/liquid/lexer.rb index b9f2422..6ca75bd 100644 --- a/lib/liquid/lexer.rb +++ b/lib/liquid/lexer.rb @@ -13,7 +13,7 @@ module Liquid '?'.freeze => :question, '-'.freeze => :dash } - IDENTIFIER = /[a-zA-Z_][\w-]*\??/ + IDENTIFIER = /[a-zA-Z_](?:[\w-]*\w)?\??/ SINGLE_STRING_LITERAL = /'[^\']*'/ DOUBLE_STRING_LITERAL = /"[^\"]*"/ NUMBER_LITERAL = /-?\d+(\.\d+)?/ diff --git a/test/unit/lexer_unit_test.rb b/test/unit/lexer_unit_test.rb index af9c267..6f9307f 100644 --- a/test/unit/lexer_unit_test.rb +++ b/test/unit/lexer_unit_test.rb @@ -36,6 +36,9 @@ class LexerUnitTest < Minitest::Test tokens = Lexer.new('2foo').tokenize assert_equal [[:number, '2'], [:id, 'foo'], [:end_of_string]], tokens + + tokens = Lexer.new('foo-bar-baz-').tokenize + assert_equal [[:id, 'foo-bar-baz'], [:dash, "-"], [:end_of_string]], tokens end def test_whitespace