summaryrefslogtreecommitdiffstats
path: root/Modules/_ctypes/stgdict.c
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2008-08-24 05:48:10 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2008-08-24 05:48:10 (GMT)
commit2f99b241721f72c9f55617479709b589496c093d (patch)
tree46df4e6e2d10edb45724eb675519b8ae0c563998 /Modules/_ctypes/stgdict.c
parentc4b153542d63474431f2ba3b83d531cafb1748e9 (diff)
downloadcpython-2f99b241721f72c9f55617479709b589496c093d.zip
cpython-2f99b241721f72c9f55617479709b589496c093d.tar.gz
cpython-2f99b241721f72c9f55617479709b589496c093d.tar.bz2
Merged revisions 66006 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk TESTED=./python -E -tt ./Lib/test/regrtest.py -uall (both debug and opt modes) ........ r66006 | neal.norwitz | 2008-08-23 22:04:52 -0700 (Sat, 23 Aug 2008) | 25 lines Fix: * crashes on memory allocation failure found with failmalloc * memory leaks found with valgrind * compiler warnings in opt mode which would lead to invalid memory reads * problem using wrong name in decimal module reported by pychecker Update the valgrind suppressions file with new leaks that are small/one-time leaks we don't care about (ie, they are too hard to fix). TBR=barry TESTED=./python -E -tt ./Lib/test/regrtest.py -uall (both debug and opt modes) in opt mode: valgrind -q --leak-check=yes --suppressions=Misc/valgrind-python.supp \ ./python -E -tt ./Lib/test/regrtest.py -uall,-bsddb,-compiler \ -x test_logging test_ssl test_multiprocessing valgrind -q --leak-check=yes --suppressions=Misc/valgrind-python.supp \ ./python -E -tt ./Lib/test/regrtest.py test_multiprocessing for i in `seq 1 4000` ; do LD_PRELOAD=~/local/lib/libfailmalloc.so FAILMALLOC_INTERVAL=$i \ ./python -c pass done At least some of these fixes should probably be backported to 2.5. ........
Diffstat (limited to 'Modules/_ctypes/stgdict.c')
-rw-r--r--Modules/_ctypes/stgdict.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c
index aac073f..7db3e0f 100644
--- a/Modules/_ctypes/stgdict.c
+++ b/Modules/_ctypes/stgdict.c
@@ -408,6 +408,7 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct)
ffi_ofs = 0;
}
+ assert(stgdict->format == NULL);
if (isStruct && !isPacked) {
stgdict->format = alloc_format_string(NULL, "T{");
} else {
@@ -527,7 +528,9 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct)
#undef realdict
if (isStruct && !isPacked) {
+ char *ptr = stgdict->format;
stgdict->format = alloc_format_string(stgdict->format, "}");
+ PyMem_Free(ptr);
if (stgdict->format == NULL)
return -1;
}