-
-
Notifications
You must be signed in to change notification settings - Fork 32.6k
Closed
Labels
Description
PyArg_ParseTuple(args, "u#", ...)
generates a deprecation warning, as expected:
$ python3 --version
Python 3.11.0b4
$ python3 -c 'import _testcapi as t; t.getargs_u_hash("")'
<string>:1: DeprecationWarning: getargs: The 'u' format is deprecated. Use 'U' instead.
But when I turn warnings into exceptions, something weird happens:
$ python3 -Werror -c 'import _testcapi as t; t.getargs_u_hash("")'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ValueError: character U+b4000360 is not in range [U+0000; U+10ffff]
What's going on here? The code for getargs_u_hash()
looks like this:
Py_UNICODE *str;
Py_ssize_t size;
if (!PyArg_ParseTuple(args, "u#", &str, &size))
return NULL;
return PyUnicode_FromWideChar(str, size);
So it looks like PyArg_ParseTuple()
returns true, but leaves str
and size
uninitialized.