[Python-checkins] r42973 - python/trunk/Objects/unicodeobject.c

thomas.wouters python-checkins at python.org
Sun Mar 12 01:29:36 CET 2006


Author: thomas.wouters
Date: Sun Mar 12 01:29:36 2006
New Revision: 42973

Modified:
   python/trunk/Objects/unicodeobject.c
Log:

 - Reindent a confusingly indented piece of code (no intended code changes
   there)
 - Add missing DECREFs of inner-scope 'temp' variable
 - Add various missing DECREFs by changing 'return NULL' into 'goto onError'
 - Avoid double DECREF when last _PyUnicode_Resize() fails

Coverity found one of the missing DECREFs, but oddly enough not the others.



Modified: python/trunk/Objects/unicodeobject.c
==============================================================================
--- python/trunk/Objects/unicodeobject.c	(original)
+++ python/trunk/Objects/unicodeobject.c	Sun Mar 12 01:29:36 2006
@@ -7068,15 +7068,15 @@
                         /* nothing to do */;
                     else if (PyString_Check(temp)) {
                         /* convert to string to Unicode */
-		    unicode = PyUnicode_Decode(PyString_AS_STRING(temp),
+		        unicode = PyUnicode_Decode(PyString_AS_STRING(temp),
 						   PyString_GET_SIZE(temp),
-					       NULL,
+						   NULL,
 						   "strict");
-		    Py_DECREF(temp);
-		    temp = unicode;
-		    if (temp == NULL)
-			goto onError;
-		}
+		        Py_DECREF(temp);
+		        temp = unicode;
+		        if (temp == NULL)
+			    goto onError;
+		    }
 		    else {
 			Py_DECREF(temp);
 			PyErr_SetString(PyExc_TypeError,
@@ -7172,11 +7172,13 @@
 		reslen += rescnt;
 		if (reslen < 0) {
 		    Py_XDECREF(temp);
-		    Py_DECREF(result);
-		    return PyErr_NoMemory();
+		    PyErr_NoMemory();
+		    goto onError;
+		}
+		if (_PyUnicode_Resize(&result, reslen) < 0) {
+		    Py_XDECREF(temp);
+		    goto onError;
 		}
-		if (_PyUnicode_Resize(&result, reslen) < 0)
-		    return NULL;
 		res = PyUnicode_AS_UNICODE(result)
 		    + reslen - rescnt;
 	    }
@@ -7226,6 +7228,7 @@
 	    if (dict && (argidx < arglen) && c != '%') {
 		PyErr_SetString(PyExc_TypeError,
 				"not all arguments converted during string formatting");
+                Py_XDECREF(temp);
 		goto onError;
 	    }
 	    Py_XDECREF(temp);
@@ -7237,12 +7240,12 @@
 	goto onError;
     }
 
+    if (_PyUnicode_Resize(&result, reslen - rescnt) < 0)
+	goto onError;
     if (args_owned) {
 	Py_DECREF(args);
     }
     Py_DECREF(uformat);
-    if (_PyUnicode_Resize(&result, reslen - rescnt) < 0)
-	goto onError;
     return (PyObject *)result;
 
  onError:


More information about the Python-checkins mailing list