Skip to content

Commit 3b80233

Browse files
authored
unpacker: Make default size limit smaller (#319)
To avoid DoS attack, make default size limit smaller. Fixes #295
1 parent ae90b26 commit 3b80233

File tree

2 files changed

+28
-23
lines changed

2 files changed

+28
-23
lines changed

msgpack/_unpacker.pyx

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,11 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
162162
bint use_list=True, bint raw=True,
163163
encoding=None, unicode_errors=None,
164164
object_pairs_hook=None, ext_hook=ExtType,
165-
Py_ssize_t max_str_len=2147483647, # 2**32-1
166-
Py_ssize_t max_bin_len=2147483647,
167-
Py_ssize_t max_array_len=2147483647,
168-
Py_ssize_t max_map_len=2147483647,
169-
Py_ssize_t max_ext_len=2147483647):
165+
Py_ssize_t max_str_len=1024*1024,
166+
Py_ssize_t max_bin_len=1024*1024,
167+
Py_ssize_t max_array_len=128*1024,
168+
Py_ssize_t max_map_len=32*1024,
169+
Py_ssize_t max_ext_len=1024*1024):
170170
"""
171171
Unpack packed_bytes to object. Returns an unpacked object.
172172
@@ -261,16 +261,19 @@ cdef class Unpacker(object):
261261
You should set this parameter when unpacking data from untrusted source.
262262
263263
:param int max_str_len:
264-
Limits max length of str. (default: 2**31-1)
264+
Limits max length of str. (default: 1024*1024)
265265
266266
:param int max_bin_len:
267-
Limits max length of bin. (default: 2**31-1)
267+
Limits max length of bin. (default: 1024*1024)
268268
269269
:param int max_array_len:
270-
Limits max length of array. (default: 2**31-1)
270+
Limits max length of array. (default: 128*1024)
271271
272272
:param int max_map_len:
273-
Limits max length of map. (default: 2**31-1)
273+
Limits max length of map. (default: 32*1024)
274+
275+
:param int max_ext_len:
276+
Limits max length of map. (default: 1024*1024)
274277
275278
:param str encoding:
276279
Deprecated, use raw instead.
@@ -322,11 +325,11 @@ cdef class Unpacker(object):
322325
object object_hook=None, object object_pairs_hook=None, object list_hook=None,
323326
encoding=None, unicode_errors=None, int max_buffer_size=0,
324327
object ext_hook=ExtType,
325-
Py_ssize_t max_str_len=2147483647, # 2**32-1
326-
Py_ssize_t max_bin_len=2147483647,
327-
Py_ssize_t max_array_len=2147483647,
328-
Py_ssize_t max_map_len=2147483647,
329-
Py_ssize_t max_ext_len=2147483647):
328+
Py_ssize_t max_str_len=1024*1024,
329+
Py_ssize_t max_bin_len=1024*1024,
330+
Py_ssize_t max_array_len=128*1024,
331+
Py_ssize_t max_map_len=32*1024,
332+
Py_ssize_t max_ext_len=1024*1024):
330333
cdef const char *cenc=NULL,
331334
cdef const char *cerr=NULL
332335

msgpack/fallback.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -184,17 +184,19 @@ class Unpacker(object):
184184
You should set this parameter when unpacking data from untrusted source.
185185
186186
:param int max_str_len:
187-
Limits max length of str. (default: 2**31-1)
187+
Limits max length of str. (default: 1024*1024)
188188
189189
:param int max_bin_len:
190-
Limits max length of bin. (default: 2**31-1)
190+
Limits max length of bin. (default: 1024*1024)
191191
192192
:param int max_array_len:
193-
Limits max length of array. (default: 2**31-1)
193+
Limits max length of array. (default: 128*1024)
194194
195195
:param int max_map_len:
196-
Limits max length of map. (default: 2**31-1)
196+
Limits max length of map. (default: 32*1024)
197197
198+
:param int max_ext_len:
199+
Limits max length of map. (default: 1024*1024)
198200
199201
example of streaming deserialize from file-like object::
200202
@@ -218,11 +220,11 @@ def __init__(self, file_like=None, read_size=0, use_list=True, raw=True,
218220
object_hook=None, object_pairs_hook=None, list_hook=None,
219221
encoding=None, unicode_errors=None, max_buffer_size=0,
220222
ext_hook=ExtType,
221-
max_str_len=2147483647, # 2**32-1
222-
max_bin_len=2147483647,
223-
max_array_len=2147483647,
224-
max_map_len=2147483647,
225-
max_ext_len=2147483647):
223+
max_str_len=1024*1024,
224+
max_bin_len=1024*1024,
225+
max_array_len=128*1024,
226+
max_map_len=32*1024,
227+
max_ext_len=1024*1024):
226228

227229
if encoding is not None:
228230
warnings.warn(

0 commit comments

Comments
 (0)