summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorINADA Naoki <methane@users.noreply.github.com>2018-11-08 22:21:44 +0900
committerGitHub <noreply@github.com>2018-11-08 22:21:44 +0900
commit3b80233592674d18c8db7a62fa56504a5a285296 (patch)
tree394ac6a2252e1a7a4c724c04a8b506180622ebca
parentae90b26c3015e090a80a880b73895daa35f048fa (diff)
downloadmsgpack-python-3b80233592674d18c8db7a62fa56504a5a285296.tar.gz
unpacker: Make default size limit smaller (#319)
To avoid DoS attack, make default size limit smaller. Fixes #295
-rw-r--r--msgpack/_unpacker.pyx31
-rw-r--r--msgpack/fallback.py20
2 files changed, 28 insertions, 23 deletions
diff --git a/msgpack/_unpacker.pyx b/msgpack/_unpacker.pyx
index d7fa5bc..cc9e7f0 100644
--- a/msgpack/_unpacker.pyx
+++ b/msgpack/_unpacker.pyx
@@ -162,11 +162,11 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
bint use_list=True, bint raw=True,
encoding=None, unicode_errors=None,
object_pairs_hook=None, ext_hook=ExtType,
- Py_ssize_t max_str_len=2147483647, # 2**32-1
- Py_ssize_t max_bin_len=2147483647,
- Py_ssize_t max_array_len=2147483647,
- Py_ssize_t max_map_len=2147483647,
- Py_ssize_t max_ext_len=2147483647):
+ Py_ssize_t max_str_len=1024*1024,
+ Py_ssize_t max_bin_len=1024*1024,
+ Py_ssize_t max_array_len=128*1024,
+ Py_ssize_t max_map_len=32*1024,
+ Py_ssize_t max_ext_len=1024*1024):
"""
Unpack packed_bytes to object. Returns an unpacked object.
@@ -261,16 +261,19 @@ cdef class Unpacker(object):
You should set this parameter when unpacking data from untrusted source.
:param int max_str_len:
- Limits max length of str. (default: 2**31-1)
+ Limits max length of str. (default: 1024*1024)
:param int max_bin_len:
- Limits max length of bin. (default: 2**31-1)
+ Limits max length of bin. (default: 1024*1024)
:param int max_array_len:
- Limits max length of array. (default: 2**31-1)
+ Limits max length of array. (default: 128*1024)
:param int max_map_len:
- Limits max length of map. (default: 2**31-1)
+ Limits max length of map. (default: 32*1024)
+
+ :param int max_ext_len:
+ Limits max length of map. (default: 1024*1024)
:param str encoding:
Deprecated, use raw instead.
@@ -322,11 +325,11 @@ cdef class Unpacker(object):
object object_hook=None, object object_pairs_hook=None, object list_hook=None,
encoding=None, unicode_errors=None, int max_buffer_size=0,
object ext_hook=ExtType,
- Py_ssize_t max_str_len=2147483647, # 2**32-1
- Py_ssize_t max_bin_len=2147483647,
- Py_ssize_t max_array_len=2147483647,
- Py_ssize_t max_map_len=2147483647,
- Py_ssize_t max_ext_len=2147483647):
+ Py_ssize_t max_str_len=1024*1024,
+ Py_ssize_t max_bin_len=1024*1024,
+ Py_ssize_t max_array_len=128*1024,
+ Py_ssize_t max_map_len=32*1024,
+ Py_ssize_t max_ext_len=1024*1024):
cdef const char *cenc=NULL,
cdef const char *cerr=NULL
diff --git a/msgpack/fallback.py b/msgpack/fallback.py
index 0b60ba2..895864e 100644
--- a/msgpack/fallback.py
+++ b/msgpack/fallback.py
@@ -184,17 +184,19 @@ class Unpacker(object):
You should set this parameter when unpacking data from untrusted source.
:param int max_str_len:
- Limits max length of str. (default: 2**31-1)
+ Limits max length of str. (default: 1024*1024)
:param int max_bin_len:
- Limits max length of bin. (default: 2**31-1)
+ Limits max length of bin. (default: 1024*1024)
:param int max_array_len:
- Limits max length of array. (default: 2**31-1)
+ Limits max length of array. (default: 128*1024)
:param int max_map_len:
- Limits max length of map. (default: 2**31-1)
+ Limits max length of map. (default: 32*1024)
+ :param int max_ext_len:
+ Limits max length of map. (default: 1024*1024)
example of streaming deserialize from file-like object::
@@ -218,11 +220,11 @@ class Unpacker(object):
object_hook=None, object_pairs_hook=None, list_hook=None,
encoding=None, unicode_errors=None, max_buffer_size=0,
ext_hook=ExtType,
- max_str_len=2147483647, # 2**32-1
- max_bin_len=2147483647,
- max_array_len=2147483647,
- max_map_len=2147483647,
- max_ext_len=2147483647):
+ max_str_len=1024*1024,
+ max_bin_len=1024*1024,
+ max_array_len=128*1024,
+ max_map_len=32*1024,
+ max_ext_len=1024*1024):
if encoding is not None:
warnings.warn(