diff --git a/lib/liquid/template.rb b/lib/liquid/template.rb index de06a6fa..e27ca922 100644 --- a/lib/liquid/template.rb +++ b/lib/liquid/template.rb @@ -107,6 +107,7 @@ module Liquid # Returns self for easy chaining def parse(source, options = {}) parse_context = configure_options(options) + source = source.to_s.to_str unless source.valid_encoding? raise SyntaxError, parse_context.locale.t("errors.syntax.invalid_template_encoding") diff --git a/lib/liquid/tokenizer.rb b/lib/liquid/tokenizer.rb index 740f8599..1b3984ca 100644 --- a/lib/liquid/tokenizer.rb +++ b/lib/liquid/tokenizer.rb @@ -5,7 +5,7 @@ module Liquid 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 2ed1a6fa..c2b63eb5 100644 --- a/test/integration/template_test.rb +++ b/test/integration/template_test.rb @@ -349,4 +349,10 @@ class TemplateTest < Minitest::Test assert_equal('Liquid syntax error: Invalid template encoding', e.message) end + + 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