When accessing the .value attribute of a c_wchar_p instance, and the
authorThomas Heller <theller@ctypes.org>
Mon, 30 Apr 2007 16:04:57 +0000 (16:04 +0000)
committerThomas Heller <theller@ctypes.org>
Mon, 30 Apr 2007 16:04:57 +0000 (16:04 +0000)
instance does not point to a valid wchar_t zero-terminated string,
raise a ValueError.  c_char_p does this already.

The ValueError message now contains the correct pointer address.

Will backport to release25-maint.

Modules/_ctypes/cfield.c

index e7bf2742665c6b892cf0833dd258f16ddb82e6b1..6b0a526aca30dd46f3bec13447246d6e7839ed0e 100644 (file)
@@ -1366,7 +1366,7 @@ z_get(void *ptr, unsigned size)
                if (IsBadStringPtrA(*(char **)ptr, -1)) {
                        PyErr_Format(PyExc_ValueError,
                                     "invalid string pointer %p",
-                                    ptr);
+                                    *(char **)ptr);
                        return NULL;
                }
 #endif
@@ -1451,9 +1451,17 @@ Z_get(void *ptr, unsigned size)
 {
        wchar_t *p;
        p = *(wchar_t **)ptr;
-       if (p)
+       if (p) {
+#if defined(MS_WIN32) && !defined(_WIN32_WCE)
+               if (IsBadStringPtrW(*(wchar_t **)ptr, -1)) {
+                       PyErr_Format(PyExc_ValueError,
+                                    "invalid string pointer %p",
+                                    *(wchar_t **)ptr);
+                       return NULL;
+               }
+#endif
                return PyUnicode_FromWideChar(p, wcslen(p));
-       else {
+       else {
                Py_INCREF(Py_None);
                return Py_None;
        }