Skip to content

Commit

Permalink
Properly INCREF/DECREF objects pushed on the reader stack
Browse files Browse the repository at this point in the history
  • Loading branch information
lelit committed Aug 23, 2017
1 parent a628ac3 commit 4493938
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions rapidjson.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -285,21 +285,22 @@ struct PyHandler {
HandlerContext ctx;
ctx.isObject = true;
ctx.object = mapping;
Py_INCREF(mapping);

stack.push_back(ctx);

return true;
}

bool EndObject(SizeType member_count) {
PyObject* mapping = stack.back().object;
stack.pop_back();

if (objectHook == NULL && decoderEndObject == NULL) {
stack.pop_back();
Py_DECREF(mapping);
return true;
}

PyObject* mapping = stack.back().object;
stack.pop_back();

PyObject* replacement;
if (decoderEndObject != NULL) {
replacement = PyObject_CallFunctionObjArgs(decoderEndObject, mapping, NULL);
Expand Down Expand Up @@ -371,21 +372,22 @@ struct PyHandler {
HandlerContext ctx;
ctx.isObject = false;
ctx.object = list;
Py_INCREF(list);

stack.push_back(ctx);

return true;
}

bool EndArray(SizeType elementCount) {
PyObject* sequence = stack.back().object;
stack.pop_back();

if (decoderEndArray == NULL) {
stack.pop_back();
Py_DECREF(sequence);
return true;
}

PyObject* sequence = stack.back().object;
stack.pop_back();

PyObject* replacement = PyObject_CallFunctionObjArgs(decoderEndArray, sequence, NULL);
Py_DECREF(sequence);
if (replacement == NULL)
Expand Down

0 comments on commit 4493938

Please sign in to comment.