Marc-Andre Lemburg added the comment:
PyUnicode_AsDecodedObject() and PyUnicode_AsEncodedObject() were meant as C API
implementations of the unicode.decode() and unicode.encode() methods in
Python2. Not having PyUnicode_AsDecodedObject() documented was likely an
oversight on my part.
In Python2, unicode.decode() and unicode.encode() were more or less direct
interfaces to the codec registry. In Python 2.7 this was changed to issue a
warning for porting to Python 3.
In Python3, the methods were changed to only return unicode objects and to
reflect this change without breaking the C API, the new
PyUnicode_AsDecodedUnicode() and PyUnicode_AsEncodedUnicode() were added.
I guess the more recent changes simply didn't pay attention to this difference
anymore and put restrictions on the output of PyUnicode_AsDecodedObject() and
PyUnicode_AsEncodedObject() which were not originally intended, hence the crash
you are seeing, Serhiy.
Going forward, C extensions in Python3 could indeed use the PyCodec_*() APIs
Python tracker <rep...@bugs.python.org>
Python-bugs-list mailing list