[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