updated for version 7.3.1069
Problem: Python: memory leaks.
Solution: Python patch 28: Purge out DICTKEY_CHECK_EMPTY macros. (ZyX)
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 5fe0476..df2af8c 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -32,15 +32,8 @@
#define DICTKEY_DECL \
PyObject *dictkey_todecref = NULL;
-#define DICTKEY_CHECK_EMPTY(err) \
- if (*key == NUL) \
- { \
- PyErr_SetString(PyExc_ValueError, _("empty keys are not allowed")); \
- return err; \
- }
-#define DICTKEY_SET_KEY (key = StringToChars(keyObject, &dictkey_todecref))
#define DICTKEY_GET(err, decref) \
- if (!DICTKEY_SET_KEY) \
+ if (!(key = StringToChars(keyObject, &dictkey_todecref))) \
{ \
if (decref) \
{ \
@@ -50,7 +43,11 @@
} \
if (decref && !dictkey_todecref) \
dictkey_todecref = keyObject; \
- DICTKEY_CHECK_EMPTY(err)
+ if (*key == NUL) \
+ { \
+ PyErr_SetString(PyExc_ValueError, _("empty keys are not allowed")); \
+ return err; \
+ }
#define DICTKEY_UNREF \
Py_XDECREF(dictkey_todecref);
@@ -4551,7 +4548,7 @@
while (PyDict_Next(obj, &iter, &keyObject, &valObject))
{
- DICTKEY_DECL
+ PyObject *todecref = NULL;
if (keyObject == NULL || valObject == NULL)
{
@@ -4559,16 +4556,21 @@
return -1;
}
- if (!DICTKEY_SET_KEY)
+ if (!(key = StringToChars(keyObject, &todecref)))
{
dict_unref(dict);
return -1;
}
- DICTKEY_CHECK_EMPTY(-1)
+ if (*key == NUL)
+ {
+ dict_unref(dict);
+ Py_XDECREF(todecref);
+ return -1;
+ }
di = dictitem_alloc(key);
- DICTKEY_UNREF
+ Py_XDECREF(todecref);
if (di == NULL)
{
@@ -4632,31 +4634,37 @@
while ((keyObject = PyIter_Next(iterator)))
{
- DICTKEY_DECL
+ PyObject *todecref;
- if (!DICTKEY_SET_KEY)
+ if (!(key = StringToChars(keyObject, &todecref)))
{
+ Py_DECREF(keyObject);
Py_DECREF(iterator);
dict_unref(dict);
- DICTKEY_UNREF
return -1;
}
- DICTKEY_CHECK_EMPTY(-1)
+ if (*key == NUL)
+ {
+ Py_DECREF(keyObject);
+ Py_DECREF(iterator);
+ Py_XDECREF(todecref);
+ dict_unref(dict);
+ return -1;
+ }
if (!(valObject = PyObject_GetItem(obj, keyObject)))
{
Py_DECREF(keyObject);
Py_DECREF(iterator);
+ Py_XDECREF(todecref);
dict_unref(dict);
- DICTKEY_UNREF
return -1;
}
di = dictitem_alloc(key);
- DICTKEY_UNREF
-
Py_DECREF(keyObject);
+ Py_XDECREF(todecref);
if (di == NULL)
{
diff --git a/src/version.c b/src/version.c
index 7a1ab6e..38536e4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1069,
+/**/
1068,
/**/
1067,