]> granicus.if.org Git - python/commitdiff
Fix reference leak noted in test_types:
authorMichael W. Hudson <mwh@python.net>
Thu, 14 Aug 2003 17:04:28 +0000 (17:04 +0000)
committerMichael W. Hudson <mwh@python.net>
Thu, 14 Aug 2003 17:04:28 +0000 (17:04 +0000)
Check for a[:] = a _before_ calling PySequence_Fast on a.
release23-maint candidate
Reference leak doesn't happen with head of release22-maint.

Objects/listobject.c

index b059420f4a6d7b3ae2374a4810870946ede18aef..ed2820093c5c364628e1f09bef9ec5ef3470b0af 100644 (file)
@@ -472,15 +472,6 @@ list_ass_slice(PyListObject *a, int ilow, int ihigh, PyObject *v)
                n = 0;
        else {
                char msg[256];
-               PyOS_snprintf(msg, sizeof(msg),
-                             "must assign sequence"
-                             " (not \"%.200s\") to slice",
-                             v->ob_type->tp_name);
-               v_as_SF = PySequence_Fast(v, msg);
-               if(v_as_SF == NULL)
-                       return -1;
-               n = PySequence_Fast_GET_SIZE(v_as_SF);
-
                if (a == b) {
                        /* Special case "a[i:j] = a" -- copy b first */
                        int ret;
@@ -491,6 +482,15 @@ list_ass_slice(PyListObject *a, int ilow, int ihigh, PyObject *v)
                        Py_DECREF(v);
                        return ret;
                }
+
+               PyOS_snprintf(msg, sizeof(msg),
+                             "must assign sequence"
+                             " (not \"%.200s\") to slice",
+                             v->ob_type->tp_name);
+               v_as_SF = PySequence_Fast(v, msg);
+               if(v_as_SF == NULL)
+                       return -1;
+               n = PySequence_Fast_GET_SIZE(v_as_SF);
        }
        if (ilow < 0)
                ilow = 0;