From 719a98a25e0761bec395bfb09dff17d493899498 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Tue, 2 Jun 2015 14:32:39 -0400 Subject: [PATCH 1/3] Ensure raw tag has no arguments --- lib/liquid/locales/en.yml | 1 + lib/liquid/tags/raw.rb | 9 +++++++++ test/integration/tags/raw_tag_test.rb | 3 ++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/liquid/locales/en.yml b/lib/liquid/locales/en.yml index 3e7460c..e69eb3e 100644 --- a/lib/liquid/locales/en.yml +++ b/lib/liquid/locales/en.yml @@ -1,6 +1,7 @@ --- errors: syntax: + tag_unexpected_args: "Syntax Error in '%{tag}' - Valid syntax: %{tag}" assign: "Syntax Error in 'assign' - Valid syntax: assign [var] = [source]" capture: "Syntax Error in 'capture' - Valid syntax: capture [var]" case: "Syntax Error in 'case' - Valid syntax: case [condition]" diff --git a/lib/liquid/tags/raw.rb b/lib/liquid/tags/raw.rb index 307f71a..5cdd957 100644 --- a/lib/liquid/tags/raw.rb +++ b/lib/liquid/tags/raw.rb @@ -1,7 +1,16 @@ module Liquid class Raw < Block + Syntax = /\A\s*\z/om FullTokenPossiblyInvalid = /\A(.*)#{TagStart}\s*(\w+)\s*(.*)?#{TagEnd}\z/om + def initialize(tag_name, markup, options) + super + + unless markup =~ Syntax + raise SyntaxError.new(@options[:locale].t("errors.syntax.tag_unexpected_args".freeze, tag: tag_name)) + end + end + def parse(tokens) @body = '' while token = tokens.shift diff --git a/test/integration/tags/raw_tag_test.rb b/test/integration/tags/raw_tag_test.rb index ef3e7a6..349eadc 100644 --- a/test/integration/tags/raw_tag_test.rb +++ b/test/integration/tags/raw_tag_test.rb @@ -24,6 +24,7 @@ class RawTagTest < Minitest::Test end def test_invalid_raw - assert_match_syntax_error /tag was never closed/, '{% raw } foo {% endraw %}' + assert_match_syntax_error /tag was never closed/, '{% raw %} foo' + assert_match_syntax_error /Valid syntax/, '{% raw } foo %}{% endraw %}' end end From c290375aece1685ed12ee09f21832bee00c1ce74 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Tue, 2 Jun 2015 15:17:36 -0400 Subject: [PATCH 2/3] Remove unnecessary regex options --- lib/liquid/tags/raw.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/liquid/tags/raw.rb b/lib/liquid/tags/raw.rb index 5cdd957..26222be 100644 --- a/lib/liquid/tags/raw.rb +++ b/lib/liquid/tags/raw.rb @@ -1,6 +1,6 @@ module Liquid class Raw < Block - Syntax = /\A\s*\z/om + Syntax = /\A\s*\z/ FullTokenPossiblyInvalid = /\A(.*)#{TagStart}\s*(\w+)\s*(.*)?#{TagEnd}\z/om def initialize(tag_name, markup, options) From 889019f53a390df1c80d37c1c8ef9ea3fdfe1b18 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Tue, 2 Jun 2015 15:21:51 -0400 Subject: [PATCH 3/3] Keep old test as well --- test/integration/tags/raw_tag_test.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/integration/tags/raw_tag_test.rb b/test/integration/tags/raw_tag_test.rb index 349eadc..c672734 100644 --- a/test/integration/tags/raw_tag_test.rb +++ b/test/integration/tags/raw_tag_test.rb @@ -25,6 +25,7 @@ class RawTagTest < Minitest::Test def test_invalid_raw assert_match_syntax_error /tag was never closed/, '{% raw %} foo' + assert_match_syntax_error /Valid syntax/, '{% raw } foo {% endraw %}' assert_match_syntax_error /Valid syntax/, '{% raw } foo %}{% endraw %}' end end