From 1373a0781e28a6aaa595ca3ae145ccd586004ac7 Mon Sep 17 00:00:00 2001 From: Larry Hastings Date: Wed, 24 Feb 2010 22:49:58 +0000 Subject: [PATCH] Issue #5939: Add additional runtime checking to ensure a valid capsule in Modules/_ctypes/callproc.c. Reviewed by Benjamin P. My first commit! --- Misc/NEWS | 3 +++ Modules/_ctypes/callproc.c | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index 8015894e3e5..e384a92873d 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 3.2 Alpha 1? Core and Builtins ----------------- +- Issue #5939: Add additional runtime checking to ensure a valid capsule + in Modules/_ctypes/callproc.c. + - Issue #7309: Fix unchecked attribute access when converting UnicodeEncodeError, UnicodeDecodeError, and UnicodeTranslateError to strings. diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index f5eaa0d0bab..2a75fb10848 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -139,8 +139,14 @@ _ctypes_get_errobj(int **pspace) return NULL; } errobj = PyDict_GetItem(dict, error_object_name); - if (errobj) + if (errobj) { + if (!PyCapsule_IsValid(errobj, CTYPES_CAPSULE_NAME_PYMEM)) { + PyErr_SetString(PyExc_RuntimeError, + "ctypes.error_object is an invalid capsule"); + return NULL; + } Py_INCREF(errobj); + } else { void *space = PyMem_Malloc(sizeof(int) * 2); if (space == NULL)