Backport from trunk:
Fix a potential 'SystemError: NULL result without error'.
NULL may be a valid return value from PyLong_AsVoidPtr.
Also move an older ctypes NEWS item in the correct category.
diff --git a/Misc/NEWS b/Misc/NEWS
index 04aa21f..77e97f0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,8 +12,6 @@
Core and builtins
-----------------
-- Prevent a segfault when a ctypes NULL function pointer is called.
-
- Bug #1517: Possible segfault in lookup().
- Issue #1638: %zd configure test fails on Linux.
@@ -171,6 +169,10 @@
Extension Modules
-----------------
+- Fix a potential 'SystemError: NULL result without error' in _ctypes.
+
+- Prevent a segfault when a ctypes NULL function pointer is called.
+
- Bug #1301: Bad assert in _tkinter fixed.
- Patch #1114: fix curses module compilation on 64-bit AIX, & possibly
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 47fab8a..fe772ac 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -2896,7 +2896,7 @@
|| PyLong_Check(PyTuple_GET_ITEM(args, 0)))) {
CDataObject *ob;
void *ptr = PyLong_AsVoidPtr(PyTuple_GET_ITEM(args, 0));
- if (ptr == NULL)
+ if (ptr == NULL && PyErr_Occurred())
return NULL;
ob = (CDataObject *)GenericCData_new(type, args, kwds);
if (ob == NULL)