From 0208491f73aadcaad76917d41b1f921fdcaa239a Mon Sep 17 00:00:00 2001 From: Chandler May Date: Sun, 27 Mar 2016 22:47:06 -0400 Subject: [PATCH] THRIFT-3765 fix memory leak in python compact protocol extension --- lib/py/src/ext/protocol.tcc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/py/src/ext/protocol.tcc b/lib/py/src/ext/protocol.tcc index 2f0d083978a..6e978d7c7b1 100644 --- a/lib/py/src/ext/protocol.tcc +++ b/lib/py/src/ext/protocol.tcc @@ -418,19 +418,24 @@ bool ProtocolBase::encodeValue(PyObject* value, TType type, PyObject* type } case T_STRING: { + ScopedPyObject nval; + if (PyUnicode_Check(value)) { - value = PyUnicode_AsUTF8String(value); - if (!value) { + nval.reset(PyUnicode_AsUTF8String(value)); + if (!nval) { return false; } + } else { + Py_INCREF(value); + nval.reset(value); } - Py_ssize_t len = PyBytes_Size(value); + Py_ssize_t len = PyBytes_Size(nval.get()); if (!detail::check_ssize_t_32(len)) { return false; } - impl()->writeString(value, static_cast(len)); + impl()->writeString(nval.get(), static_cast(len)); return true; }