[Python-checkins] r51227 - in python/trunk: Lib/test/regrtest.py Modules/_ctypes/cfield.c Objects/funcobject.c Python/ceval.c Python/pythonrun.c

neal.norwitz python-checkins at python.org
Sat Aug 12 04:06:35 CEST 2006


Author: neal.norwitz
Date: Sat Aug 12 04:06:34 2006
New Revision: 51227

Modified:
   python/trunk/Lib/test/regrtest.py
   python/trunk/Modules/_ctypes/cfield.c
   python/trunk/Objects/funcobject.c
   python/trunk/Python/ceval.c
   python/trunk/Python/pythonrun.c
Log:
Check returned pointer is valid.
Klocwork #233


Modified: python/trunk/Lib/test/regrtest.py
==============================================================================
--- python/trunk/Lib/test/regrtest.py	(original)
+++ python/trunk/Lib/test/regrtest.py	Sat Aug 12 04:06:34 2006
@@ -123,6 +123,7 @@
 
 import os
 import sys
+import signal
 import getopt
 import random
 import warnings
@@ -289,6 +290,12 @@
     if single and fromfile:
         usage(2, "-s and -f don't go together!")
 
+    def handle_signal(*args):
+        raise RuntimeError('signal received %s' % args)
+
+    # Provide a traceback if we are terminated.
+    signal.signal(signal.SIGTERM, handle_signal)
+
     good = []
     bad = []
     skipped = []

Modified: python/trunk/Modules/_ctypes/cfield.c
==============================================================================
--- python/trunk/Modules/_ctypes/cfield.c	(original)
+++ python/trunk/Modules/_ctypes/cfield.c	Sat Aug 12 04:06:34 2006
@@ -105,6 +105,12 @@
 		StgDictObject *idict;
 		if (adict && adict->proto) {
 			idict = PyType_stgdict(adict->proto);
+			if (!idict) {
+				PyErr_SetString(PyExc_TypeError,
+						"has no _stginfo_");
+				Py_DECREF(self);
+				return NULL;
+			}
 			if (idict->getfunc == getentry("c")->getfunc) {
 				struct fielddesc *fd = getentry("s");
 				getfunc = fd->getfunc;

Modified: python/trunk/Objects/funcobject.c
==============================================================================
--- python/trunk/Objects/funcobject.c	(original)
+++ python/trunk/Objects/funcobject.c	Sat Aug 12 04:06:34 2006
@@ -486,9 +486,10 @@
 	Py_ssize_t nk, nd;
 
 	argdefs = PyFunction_GET_DEFAULTS(func);
+	/* XXX(nnorwitz): don't we know argdefs is either NULL or a tuple? */
 	if (argdefs != NULL && PyTuple_Check(argdefs)) {
 		d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
-		nd = PyTuple_Size(argdefs);
+		nd = PyTuple_GET_SIZE(argdefs);
 	}
 	else {
 		d = NULL;
@@ -517,7 +518,7 @@
 	result = PyEval_EvalCodeEx(
 		(PyCodeObject *)PyFunction_GET_CODE(func),
 		PyFunction_GET_GLOBALS(func), (PyObject *)NULL,
-		&PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
+		&PyTuple_GET_ITEM(arg, 0), PyTuple_GET_SIZE(arg),
 		k, nk, d, nd,
 		PyFunction_GET_CLOSURE(func));
 

Modified: python/trunk/Python/ceval.c
==============================================================================
--- python/trunk/Python/ceval.c	(original)
+++ python/trunk/Python/ceval.c	Sat Aug 12 04:06:34 2006
@@ -230,6 +230,15 @@
 }
 
 void
+_PyEval_FiniThreads(void)
+{
+	if (interpreter_lock)
+		PyThread_free_lock(interpreter_lock);
+	interpreter_lock = 0;
+	main_thread = 0;
+}
+
+void
 PyEval_AcquireLock(void)
 {
 	PyThread_acquire_lock(interpreter_lock, 1);

Modified: python/trunk/Python/pythonrun.c
==============================================================================
--- python/trunk/Python/pythonrun.c	(original)
+++ python/trunk/Python/pythonrun.c	Sat Aug 12 04:06:34 2006
@@ -60,6 +60,7 @@
 static void call_ll_exitfuncs(void);
 extern void _PyUnicode_Init(void);
 extern void _PyUnicode_Fini(void);
+extern void _PyEval_FiniThreads(void);
 
 #ifdef WITH_THREAD
 extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
@@ -461,6 +462,8 @@
 	_PyUnicode_Fini();
 #endif
 
+	_PyEval_FiniThreads();
+
 	/* XXX Still allocated:
 	   - various static ad-hoc pointers to interned strings
 	   - int and float free list blocks


More information about the Python-checkins mailing list