summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorInada Naoki <songofacandy@gmail.com>2021-02-27 11:31:03 (GMT)
committerGitHub <noreply@github.com>2021-02-27 11:31:03 (GMT)
commitc71d24f55828e7f0f2c8750d2e1b04d04539beff (patch)
tree88a0fd8b9a298791fb0e862c94de5f8370e15490
parent145bf269df3530176f6ebeab1324890ef7070bf8 (diff)
downloadcpython-c71d24f55828e7f0f2c8750d2e1b04d04539beff.zip
cpython-c71d24f55828e7f0f2c8750d2e1b04d04539beff.tar.gz
cpython-c71d24f55828e7f0f2c8750d2e1b04d04539beff.tar.bz2
bpo-43321: Fix SystemError in getargs.c (GH-24656)
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2021-02-26-13-17-52.bpo-43321.TCS3ph.rst2
-rw-r--r--Python/getargs.c4
2 files changed, 4 insertions, 2 deletions
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
index 0000000..32c5ce1
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2021-02-26-13-17-52.bpo-43321.TCS3ph.rst
@@ -0,0 +1,2 @@
+Fix ``SystemError`` raised when ``PyArg_Parse*()`` is used with ``#`` but
+without ``PY_SSIZE_T_CLEAN`` defined.
diff --git a/Python/getargs.c b/Python/getargs.c
index 936eb6a..b85b575 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -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++;