]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1069 v7.3.1069
authorBram Moolenaar <Bram@vim.org>
Thu, 30 May 2013 12:52:37 +0000 (14:52 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 30 May 2013 12:52:37 +0000 (14:52 +0200)
Problem:    Python: memory leaks.
Solution:   Python patch 28: Purge out DICTKEY_CHECK_EMPTY macros. (ZyX)

src/if_py_both.h
src/version.c

index 5fe0476049dc3d7569b30a6977940d1a478d1278..df2af8cd8b2989acea6055967e8f457b0532cae6 100644 (file)
@@ -32,15 +32,8 @@ typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
 
 #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 @@ typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
     } \
     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 @@ pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
 
     while (PyDict_Next(obj, &iter, &keyObject, &valObject))
     {
-       DICTKEY_DECL
+       PyObject        *todecref = NULL;
 
        if (keyObject == NULL || valObject == NULL)
        {
@@ -4559,16 +4556,21 @@ pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
            return -1;
        }
 
-       if (!DICTKEY_SET_KEY)
+       if (!(key = StringToChars(keyObject, &todecref)))
+       {
+           dict_unref(dict);
+           return -1;
+       }
+       if (*key == NUL)
        {
            dict_unref(dict);
+           Py_XDECREF(todecref);
            return -1;
        }
-       DICTKEY_CHECK_EMPTY(-1)
 
        di = dictitem_alloc(key);
 
-       DICTKEY_UNREF
+       Py_XDECREF(todecref);
 
        if (di == NULL)
        {
@@ -4632,31 +4634,37 @@ pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
 
     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)
        {
index 7a1ab6e98eac8ac6c3ea8046d65504f4efa58a94..38536e41c7fc32ddac1947a0ef792f1cd838178a 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1069,
 /**/
     1068,
 /**/