From: Guido van Rossum Date: Thu, 25 Oct 2001 20:18:35 +0000 (+0000) Subject: Fix SF bug #474538: Memory (reference) leak in poller.register (Dave Brueck) X-Git-Tag: v2.2.1c1~1056 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a0dfc8577de8c1b6de19dccc2992b6d95b71f969;p=thirdparty%2FPython%2Fcpython.git Fix SF bug #474538: Memory (reference) leak in poller.register (Dave Brueck) Replace some tortuous code that was trying to be clever but forgot to DECREF the key and value, by more longwinded but obviously correct code. (Inspired by but not copying the fix from SF patch #475033.) --- diff --git a/Misc/ACKS b/Misc/ACKS index 18bac30b7226..f6b73fe3a0d6 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -54,6 +54,7 @@ Terrence Brannon Dave Brennan Gary S. Brown Oleg Broytmann +Dave Brueck Stan Bubrouski Erik de Bueger Jan-Hein B"uhrman diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index e480fb478517..348987b6030a 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -366,6 +366,7 @@ poll_register(pollObject *self, PyObject *args) { PyObject *o, *key, *value; int fd, events = POLLIN | POLLPRI | POLLOUT; + int err; if (!PyArg_ParseTuple(args, "O|i:register", &o, &events)) { return NULL; @@ -376,11 +377,20 @@ poll_register(pollObject *self, PyObject *args) /* Add entry to the internal dictionary: the key is the file descriptor, and the value is the event mask. */ - if ( (NULL == (key = PyInt_FromLong(fd))) || - (NULL == (value = PyInt_FromLong(events))) || - (PyDict_SetItem(self->dict, key, value)) == -1) { + key = PyInt_FromLong(fd); + if (key == NULL) + return NULL; + value = PyInt_FromLong(events); + if (value == NULL) { + Py_DECREF(key); return NULL; } + err = PyDict_SetItem(self->dict, key, value); + Py_DECREF(key); + Py_DECREF(value); + if (err < 0) + return NULL; + self->ufd_uptodate = 0; Py_INCREF(Py_None);