Skip to content

Commit 4c6de0d

Browse files
committed
Fix memory leaks in generic setters
.. and a bool refactor.
1 parent 64d7fa9 commit 4c6de0d

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

confluent_kafka/src/confluent_kafka.c

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,14 +1427,9 @@ static int producer_conf_set_special (Handle *self, rd_kafka_conf_t *conf,
14271427
* providing the same functionality from dr_msg_cb trampoline.
14281428
*/
14291429

1430-
if (!PyBool_Check(valobj)) {
1431-
cfl_PyErr_Format(
1432-
RD_KAFKA_RESP_ERR__INVALID_ARG,
1433-
"%s requires bool", name);
1430+
if (!cfl_PyBool_get(valobj, name,
1431+
&self->u.Producer.dr_only_error))
14341432
return -1;
1435-
}
1436-
1437-
self->u.Producer.dr_only_error = valobj == Py_True;
14381433

14391434
return 1;
14401435
}
@@ -1831,20 +1826,30 @@ PyObject *cfl_PyObject_lookup (const char *modulename, const char *typename) {
18311826

18321827

18331828
void cfl_PyDict_SetString (PyObject *dict, const char *name, const char *val) {
1834-
PyDict_SetItemString(dict, name, cfl_PyUnistr(_FromString(val)));
1829+
PyObject *vo = cfl_PyUnistr(_FromString(val));
1830+
PyDict_SetItemString(dict, name, vo);
1831+
Py_DECREF(vo);
18351832
}
18361833

18371834
void cfl_PyDict_SetInt (PyObject *dict, const char *name, int val) {
1838-
PyDict_SetItemString(dict, name, PyLong_FromLong((long)val));
1835+
PyObject *vo = cfl_PyInt_FromInt(val);
1836+
PyDict_SetItemString(dict, name, vo);
1837+
Py_DECREF(vo);
18391838
}
18401839

18411840

18421841
int cfl_PyObject_SetString (PyObject *o, const char *name, const char *val) {
1843-
return PyObject_SetAttrString(o, name, cfl_PyUnistr(_FromString(val)));
1842+
PyObject *vo = cfl_PyUnistr(_FromString(val));
1843+
int r = PyObject_SetAttrString(o, name, vo);
1844+
Py_DECREF(vo);
1845+
return r;
18441846
}
18451847

1846-
int cfl_PyObject_SetLong (PyObject *o, const char *name, long val) {
1847-
return PyObject_SetAttrString(o, name, PyLong_FromLong(val));
1848+
int cfl_PyObject_SetInt (PyObject *o, const char *name, int val) {
1849+
PyObject *vo = cfl_PyInt_FromInt(val);
1850+
int r = PyObject_SetAttrString(o, name, vo);
1851+
Py_DECREF(vo);
1852+
return r;
18481853
}
18491854

18501855

0 commit comments

Comments
 (0)