Raise a Liquid::ArgumentError in slice filter for invalid integers.

This commit is contained in:
Dylan Thacker-Smith
2015-06-02 16:05:08 -04:00
parent be2e41e4d5
commit ab7109a335
2 changed files with 18 additions and 2 deletions
+12 -2
View File
@@ -46,8 +46,8 @@ module Liquid
end
def slice(input, offset, length = nil)
offset = Integer(offset)
length = length ? Integer(length) : 1
offset = to_integer(offset)
length = length ? to_integer(length) : 1
if input.is_a?(Array)
input.slice(offset, length) || []
@@ -317,6 +317,16 @@ module Liquid
private
def to_integer(num)
return num if num.is_a?(Integer)
num = num.to_s
begin
Integer(num)
rescue ::ArgumentError
raise Liquid::ArgumentError, "invalid integer '#{num}'"
end
end
def to_number(obj)
case obj
when Float
+6
View File
@@ -76,6 +76,12 @@ class StandardFiltersTest < Minitest::Test
assert_equal '', @filters.slice(nil, 0)
assert_equal '', @filters.slice('foobar', 100, 10)
assert_equal '', @filters.slice('foobar', -100, 10)
assert_raises(Liquid::ArgumentError) do
@filters.slice('foobar', nil)
end
assert_raises(Liquid::ArgumentError) do
@filters.slice('foobar', 0, "")
end
end
def test_slice_on_arrays