Skip to content

PyArg_ParseTuple(args, "u#", ...) misbehaves with -Werror #94864

Description

@jwilk

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.

Metadata

Metadata

Labels

3.10only security fixes3.11only security fixes

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions