Merge pull request #583 from Shopify/slice-nil-offset

Raise a Liquid::ArgumentError in slice filter for invalid integers.
This commit is contained in:
Dylan Thacker-Smith
2015-06-03 01:43:56 -04:00
2 changed files with 19 additions and 2 deletions

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"
end
end
def to_number(obj)
case obj
when Float

View File

@@ -76,6 +76,13 @@ 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_equal 'oob', @filters.slice('foobar', '1', '3')
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