]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-43321: Fix SystemError in getargs.c (GH-24656)
authorInada Naoki <songofacandy@gmail.com>
Sat, 27 Feb 2021 11:31:03 +0000 (20:31 +0900)
committerGitHub <noreply@github.com>
Sat, 27 Feb 2021 11:31:03 +0000 (20:31 +0900)
Misc/NEWS.d/next/Core and Builtins/2021-02-26-13-17-52.bpo-43321.TCS3ph.rst [new file with mode: 0644]
Python/getargs.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-02-26-13-17-52.bpo-43321.TCS3ph.rst b/Misc/NEWS.d/next/Core and Builtins/2021-02-26-13-17-52.bpo-43321.TCS3ph.rst
new file mode 100644 (file)
index 0000000..32c5ce1
--- /dev/null
@@ -0,0 +1,2 @@
+Fix ``SystemError`` raised when ``PyArg_Parse*()`` is used with ``#`` but
+without ``PY_SSIZE_T_CLEAN`` defined.
index 936eb6a89a392870a05874964fa37174e8d4b7f3..b85b575a147fe6be5c7090368568bc186d2509c9 100644 (file)
@@ -655,14 +655,14 @@ static const char *
 convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
               char *msgbuf, size_t bufsize, freelist_t *freelist)
 {
+#define RETURN_ERR_OCCURRED return msgbuf
     /* For # codes */
 #define REQUIRE_PY_SSIZE_T_CLEAN \
     if (!(flags & FLAG_SIZE_T)) { \
         PyErr_SetString(PyExc_SystemError, \
                         "PY_SSIZE_T_CLEAN macro must be defined for '#' formats"); \
-        return NULL; \
+        RETURN_ERR_OCCURRED; \
     }
-#define RETURN_ERR_OCCURRED return msgbuf
 
     const char *format = *p_format;
     char c = *format++;