CGI powered standard filters to handle non string inputs

This commit is contained in:
Thierry Joyal
2017-05-25 15:39:49 +00:00
parent 48a6d86ac2
commit e340803d12
2 changed files with 15 additions and 3 deletions

View File

@@ -33,7 +33,7 @@ module Liquid
end
def escape(input)
CGI.escapeHTML(input).untaint unless input.nil?
CGI.escapeHTML(input.to_s).untaint unless input.nil?
end
alias_method :h, :escape
@@ -42,11 +42,11 @@ module Liquid
end
def url_encode(input)
CGI.escape(input) unless input.nil?
CGI.escape(input.to_s) unless input.nil?
end
def url_decode(input)
CGI.unescape(input) unless input.nil?
CGI.unescape(input.to_s) unless input.nil?
end
def slice(input, offset, length = nil)

View File

@@ -128,8 +128,16 @@ class StandardFiltersTest < Minitest::Test
def test_escape
assert_equal '&lt;strong&gt;', @filters.escape('<strong>')
assert_equal '1', @filters.escape(1)
assert_equal '2001-02-03', @filters.escape(Date.new(2001, 2, 3))
assert_nil @filters.escape(nil)
end
def test_h
assert_equal '&lt;strong&gt;', @filters.h('<strong>')
assert_equal '1', @filters.h(1)
assert_equal '2001-02-03', @filters.h(Date.new(2001, 2, 3))
assert_nil @filters.h(nil)
end
def test_escape_once
@@ -138,6 +146,8 @@ class StandardFiltersTest < Minitest::Test
def test_url_encode
assert_equal 'foo%2B1%40example.com', @filters.url_encode('foo+1@example.com')
assert_equal '1', @filters.url_encode(1)
assert_equal '2001-02-03', @filters.url_encode(Date.new(2001, 2, 3))
assert_nil @filters.url_encode(nil)
end
@@ -145,6 +155,8 @@ class StandardFiltersTest < Minitest::Test
assert_equal 'foo bar', @filters.url_decode('foo+bar')
assert_equal 'foo bar', @filters.url_decode('foo%20bar')
assert_equal 'foo+1@example.com', @filters.url_decode('foo%2B1%40example.com')
assert_equal '1', @filters.url_decode(1)
assert_equal '2001-02-03', @filters.url_decode(Date.new(2001, 2, 3))
assert_nil @filters.url_decode(nil)
end