THRIFT-3765 fix memory leak in python compact protocol extension
This closes #970
diff --git a/lib/py/src/ext/protocol.tcc b/lib/py/src/ext/protocol.tcc
index 2f0d083..6e978d7 100644
--- a/lib/py/src/ext/protocol.tcc
+++ b/lib/py/src/ext/protocol.tcc
@@ -418,19 +418,24 @@
}
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<int32_t>(len));
+ impl()->writeString(nval.get(), static_cast<int32_t>(len));
return true;
}