pypy3.9: regression in raw-unicode-escape handling of stray backslashes
Consider the following sample:
print(b'[:/?#[\\]@]'.decode('raw-unicode-escape'))
In CPython 3.9 and PyPy 3.8, it yields:
[:/?#[\]@]
In PyPy 3.9, it causes:
UnicodeDecodeError: 'rawunicodeescape' codec can't decode bytes in position 6-7: truncated \UXXXXXXXX escape
Unfortunately this breaks importing rfc3987 package, e.g.:
$ pip install rfc3987
$ pypy3 -c 'import rfc3987'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/venv/lib/pypy3.9/site-packages/rfc3987.py", line 357, in <module>
upatterns_no_names = dict((k, _interpret_unicode_escapes(v)) for k,v
File "/tmp/venv/lib/pypy3.9/site-packages/rfc3987.py", line 357, in <genexpr>
upatterns_no_names = dict((k, _interpret_unicode_escapes(v)) for k,v
File "/tmp/venv/lib/pypy3.9/site-packages/rfc3987.py", line 351, in _interpret_unicode_escapes
return string.encode('ascii').decode('raw-unicode-escape')
UnicodeDecodeError: 'rawunicodeescape' codec can't decode bytes in position 6-7: truncated \UXXXXXXXX escape
Don't ask me why they do such crazy stuff…