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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy