Skip to content

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

Closed

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.

Activity

  1. added a commit that references this issue on Jul 16, 2022
  2. added a commit that references this issue on Jul 17, 2022
  3. added a commit that references this issue on Jul 17, 2022
  4. added a commit that references this issue on Jul 17, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

3.10 (EOL)end of life3.11only security fixes

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions