Skip to content

Conversation

@magicmark
Copy link
Owner

The failing test in graphql-python#574 is test_http_multipart_invalid_utf8.

utf8 decoding errors bubbled up into a JSONDecodeError, which triggered a bug under py310 specifically:

  • It sends invalid utf8 bytes (\xff\xfe) in the multipart response
  • aiohttp's part.text() raises a UnicodeDecodeError
  • The HTTP multipart transport wasn't catching UnicodeDecodeError, only JSONDecodeError
  • When pytest tried to format the uncaught underlying UnicodeDecodeError, the exceptiongroup package in py310 hit an internal bug:
File "/home/runner/work/gql/gql/.tox/pypy3/lib/pypy3.10/site-packages/exceptiongroup/_formatting.py", line 329, in format_exception_only
    yield _format_final_exc_line(stype, self._str)
File "/home/runner/work/gql/gql/.tox/pypy3/lib/pypy3.10/site-packages/exceptiongroup/_formatting.py", line 33, in _format_final_exc_line
    line = f"{etype}: {valuestr}\n"
SystemError: unexpected internal exception (please report a bug): <CheckError object at 0x336b7e90>

Catching the utf8 decoding error specifically does actually improve error handling anyway since it gives a more specific warning to the user imo.

Previously, utf8 decode errors bubbled up into json.JSONDecodeError error
handling, which triggered a bug in py310 specifically:

- The failing test was test_http_multipart_invalid_utf8 (test graphql-python#17)
- It sends invalid utf8 bytes (\xff\xfe) in the multipart response
- aiohttp's part.text() raises a UnicodeDecodeError
- The HTTP multipart transport wasn't catching UnicodeDecodeError, only json.JSONDecodeError
- When pytest tried to format the uncaught underlying UnicodeDecodeError, the exceptiongroup package in py310 hit an internal bug:

    File "/home/runner/work/gql/gql/.tox/pypy3/lib/pypy3.10/site-packages/exceptiongroup/_formatting.py", line 329, in format_exception_only
        yield _format_final_exc_line(stype, self._str)
    File "/home/runner/work/gql/gql/.tox/pypy3/lib/pypy3.10/site-packages/exceptiongroup/_formatting.py", line 33, in _format_final_exc_line
        line = f"{etype}: {valuestr}\n"
    SystemError: unexpected internal exception (please report a bug): <CheckError object at 0x336b7e90>

Catching the utf8 decoding error specifically does actually improve
error handling anyway since it gives a more specific warning to the
user imo.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants