@@ -156,6 +156,13 @@ defmodule Jason.Decoder do
156156 error ( original , skip + 1 )
157157 end
158158
159+ if function_exported? ( Application , :compile_env , 3 ) do
160+ @ integer_digit_limit Application . compile_env ( :jason , :decoding_integer_digit_limit , 1024 )
161+ else
162+ # use apply to avoid warnings in newer Elixir versions
163+ @ integer_digit_limit apply ( Application , :get_env , [ :jason , :decoding_integer_digit_limit , 1024 ] )
164+ end
165+
159166 defp number ( << byte , rest :: bits >> , original , skip , stack , decode , len )
160167 when byte in '0123456789' do
161168 number ( rest , original , skip , stack , decode , len + 1 )
@@ -168,7 +175,11 @@ defmodule Jason.Decoder do
168175 number_exp_copy ( rest , original , skip + len + 1 , stack , decode , prefix )
169176 end
170177 defp number ( << rest :: bits >> , original , skip , stack , decode , len ) do
171- int = String . to_integer ( binary_part ( original , skip , len ) )
178+ token = binary_part ( original , skip , len )
179+ if byte_size ( token ) > @ integer_digit_limit do
180+ token_error ( token , skip )
181+ end
182+ int = String . to_integer ( token )
172183 continue ( rest , original , skip + len , stack , decode , int )
173184 end
174185
0 commit comments