From 719a98a25e0761bec395bfb09dff17d493899498 Mon Sep 17 00:00:00 2001 From: Justin Li Date: Tue, 2 Jun 2015 14:32:39 -0400 Subject: [PATCH] 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