Skip to content
This repository was archived by the owner on May 5, 2023. It is now read-only.

Commit 31b7fda

Browse files
committed
Fix massive memory leak with object_hook and list_hook when unpacking.
1 parent 3a472b1 commit 31b7fda

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

msgpack/unpack.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,10 @@ static inline int template_callback_array_end(unpack_user* u, msgpack_unpack_obj
161161
{
162162
if (u->list_hook) {
163163
PyObject *arglist = Py_BuildValue("(O)", *c);
164-
*c = PyEval_CallObject(u->list_hook, arglist);
164+
msgpack_unpack_object *new_c = PyEval_CallObject(u->list_hook, arglist);
165165
Py_DECREF(arglist);
166+
Py_DECREF(*c);
167+
*c = new_c;
166168
}
167169
return 0;
168170
}
@@ -190,8 +192,10 @@ static inline int template_callback_map_end(unpack_user* u, msgpack_unpack_objec
190192
{
191193
if (u->object_hook) {
192194
PyObject *arglist = Py_BuildValue("(O)", *c);
193-
*c = PyEval_CallObject(u->object_hook, arglist);
195+
msgpack_unpack_object *new_c = PyEval_CallObject(u->object_hook, arglist);
194196
Py_DECREF(arglist);
197+
Py_DECREF(*c);
198+
*c = new_c;
195199
}
196200
return 0;
197201
}

0 commit comments

Comments
 (0)