[Python-checkins] r51400 - python/trunk/Objects/classobject.c

neal.norwitz python-checkins at python.org
Sat Aug 19 06:22:34 CEST 2006


Author: neal.norwitz
Date: Sat Aug 19 06:22:33 2006
New Revision: 51400

Modified:
   python/trunk/Objects/classobject.c
Log:
Move initialization of interned strings to before allocating the
object so we don't leak op.  (Fixes an earlier patch to this code)

Klockwork #350


Modified: python/trunk/Objects/classobject.c
==============================================================================
--- python/trunk/Objects/classobject.c	(original)
+++ python/trunk/Objects/classobject.c	Sat Aug 19 06:22:33 2006
@@ -91,8 +91,22 @@
 		}
 		Py_INCREF(bases);
 	}
+
+	if (getattrstr == NULL) {
+		getattrstr = PyString_InternFromString("__getattr__");
+		if (getattrstr == NULL)
+			goto alloc_error;
+		setattrstr = PyString_InternFromString("__setattr__");
+		if (setattrstr == NULL)
+			goto alloc_error;
+		delattrstr = PyString_InternFromString("__delattr__");
+		if (delattrstr == NULL)
+			goto alloc_error;
+	}
+
 	op = PyObject_GC_New(PyClassObject, &PyClass_Type);
 	if (op == NULL) {
+alloc_error:
 		Py_DECREF(bases);
 		return NULL;
 	}
@@ -101,17 +115,7 @@
 	op->cl_dict = dict;
 	Py_XINCREF(name);
 	op->cl_name = name;
-	if (getattrstr == NULL) {
-		getattrstr = PyString_InternFromString("__getattr__");
-		if (getattrstr == NULL)
-			return NULL;
-		setattrstr = PyString_InternFromString("__setattr__");
-		if (setattrstr == NULL)
-			return NULL;
-		delattrstr = PyString_InternFromString("__delattr__");
-		if (delattrstr == NULL)
-			return NULL;
-	}
+
 	op->cl_getattr = class_lookup(op, getattrstr, &dummy);
 	op->cl_setattr = class_lookup(op, setattrstr, &dummy);
 	op->cl_delattr = class_lookup(op, delattrstr, &dummy);


More information about the Python-checkins mailing list