From 730ad3684a0480c97d0c22a1f907d16215d82aee Mon Sep 17 00:00:00 2001 From: Michael Go Date: Wed, 10 Jan 2024 16:32:08 -0400 Subject: [PATCH 1/2] allow nil template source --- lib/liquid/template.rb | 2 +- test/integration/template_test.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/liquid/template.rb b/lib/liquid/template.rb index de06a6fa4..3776415d2 100644 --- a/lib/liquid/template.rb +++ b/lib/liquid/template.rb @@ -108,7 +108,7 @@ def initialize def parse(source, options = {}) parse_context = configure_options(options) - unless source.valid_encoding? + if source.is_a?(String) && !source.valid_encoding? raise SyntaxError, parse_context.locale.t("errors.syntax.invalid_template_encoding") end diff --git a/test/integration/template_test.rb b/test/integration/template_test.rb index 2ed1a6fa8..08ec76489 100644 --- a/test/integration/template_test.rb +++ b/test/integration/template_test.rb @@ -349,4 +349,9 @@ def test_raises_error_with_invalid_utf8 assert_equal('Liquid syntax error: Invalid template encoding', e.message) end + + def test_allows_nil_as_source + template = Template.parse(nil) + assert_equal('', template.render) + end end From 6a0fe3f7e30a9c8d4aea1efd5266580d1b8cbdf5 Mon Sep 17 00:00:00 2001 From: Michael Go Date: Wed, 10 Jan 2024 16:50:31 -0400 Subject: [PATCH 2/2] convert template source to string to ensure encoding validity --- lib/liquid/template.rb | 3 ++- lib/liquid/tokenizer.rb | 2 +- test/integration/template_test.rb | 7 ++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/liquid/template.rb b/lib/liquid/template.rb index 3776415d2..e27ca922a 100644 --- a/lib/liquid/template.rb +++ b/lib/liquid/template.rb @@ -107,8 +107,9 @@ def initialize # Returns self for easy chaining def parse(source, options = {}) parse_context = configure_options(options) + source = source.to_s.to_str - if source.is_a?(String) && !source.valid_encoding? + unless source.valid_encoding? raise SyntaxError, parse_context.locale.t("errors.syntax.invalid_template_encoding") end diff --git a/lib/liquid/tokenizer.rb b/lib/liquid/tokenizer.rb index 740f85999..1b3984cab 100644 --- a/lib/liquid/tokenizer.rb +++ b/lib/liquid/tokenizer.rb @@ -5,7 +5,7 @@ class Tokenizer attr_reader :line_number, :for_liquid_tag def initialize(source, line_numbers = false, line_number: nil, for_liquid_tag: false) - @source = source.to_s.to_str + @source = source @line_number = line_number || (line_numbers ? 1 : nil) @for_liquid_tag = for_liquid_tag @offset = 0 diff --git a/test/integration/template_test.rb b/test/integration/template_test.rb index 08ec76489..c2b63eb51 100644 --- a/test/integration/template_test.rb +++ b/test/integration/template_test.rb @@ -350,8 +350,9 @@ def test_raises_error_with_invalid_utf8 assert_equal('Liquid syntax error: Invalid template encoding', e.message) end - def test_allows_nil_as_source - template = Template.parse(nil) - assert_equal('', template.render) + def test_allows_non_string_values_as_source + assert_equal('', Template.parse(nil).render) + assert_equal('1', Template.parse(1).render) + assert_equal('true', Template.parse(true).render) end end