mirror of
https://github.com/kemko/liquid.git
synced 2026-01-01 15:55:40 +03:00
Translate RangeError to Liquid::Error for truncatewords with large int (#1431)
This commit is contained in:
committed by
GitHub
parent
eab13a07d9
commit
cfe1637bdd
@@ -18,3 +18,6 @@ AllCops:
|
|||||||
Naming/MethodName:
|
Naming/MethodName:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'example/server/liquid_servlet.rb'
|
- 'example/server/liquid_servlet.rb'
|
||||||
|
|
||||||
|
Layout/BeginEndAlignment:
|
||||||
|
EnforcedStyleAlignWith: start_of_line
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ require 'bigdecimal'
|
|||||||
|
|
||||||
module Liquid
|
module Liquid
|
||||||
module StandardFilters
|
module StandardFilters
|
||||||
|
MAX_INT = (1 << 31) - 1
|
||||||
HTML_ESCAPE = {
|
HTML_ESCAPE = {
|
||||||
'&' => '&',
|
'&' => '&',
|
||||||
'>' => '>',
|
'>' => '>',
|
||||||
@@ -93,7 +94,13 @@ module Liquid
|
|||||||
words = Utils.to_integer(words)
|
words = Utils.to_integer(words)
|
||||||
words = 1 if words <= 0
|
words = 1 if words <= 0
|
||||||
|
|
||||||
wordlist = input.split(" ", words + 1)
|
wordlist = begin
|
||||||
|
input.split(" ", words + 1)
|
||||||
|
rescue RangeError
|
||||||
|
raise if words + 1 < MAX_INT
|
||||||
|
# e.g. integer #{words} too big to convert to `int'
|
||||||
|
raise Liquid::ArgumentError, "integer #{words} too big for truncatewords"
|
||||||
|
end
|
||||||
return input if wordlist.length <= words
|
return input if wordlist.length <= words
|
||||||
|
|
||||||
wordlist.pop
|
wordlist.pop
|
||||||
|
|||||||
@@ -178,6 +178,10 @@ class StandardFiltersTest < Minitest::Test
|
|||||||
assert_equal('one two three...', @filters.truncatewords("one two\tthree\nfour", 3))
|
assert_equal('one two three...', @filters.truncatewords("one two\tthree\nfour", 3))
|
||||||
assert_equal('one two...', @filters.truncatewords("one two three four", 2))
|
assert_equal('one two...', @filters.truncatewords("one two three four", 2))
|
||||||
assert_equal('one...', @filters.truncatewords("one two three four", 0))
|
assert_equal('one...', @filters.truncatewords("one two three four", 0))
|
||||||
|
exception = assert_raises(Liquid::ArgumentError) do
|
||||||
|
@filters.truncatewords("one two three four", 1 << 31)
|
||||||
|
end
|
||||||
|
assert_equal("Liquid error: integer #{1 << 31} too big for truncatewords", exception.message)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_strip_html
|
def test_strip_html
|
||||||
|
|||||||
Reference in New Issue
Block a user