From: Michael W. Hudson Date: Thu, 14 Aug 2003 17:25:59 +0000 (+0000) Subject: And backport-2-3-4: X-Git-Tag: v2.3.1~155 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d7d957187928456c542edd7a6b5451c3ff5641d8;p=thirdparty%2FPython%2Fcpython.git And backport-2-3-4: Fix reference leak noted in test_types: Check for a[:] = a _before_ calling PySequence_Fast on a. --- diff --git a/Objects/listobject.c b/Objects/listobject.c index b059420f4a6d..ed2820093c5c 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -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;