bpo-37388: Don't check encoding/errors during finalization (GH-19409)

str.encode() and str.decode() no longer check the encoding and errors
in development mode or in debug mode during Python finalization. The
codecs machinery can no longer work on very late calls to
str.encode() and str.decode().

This change should help to call _PyObject_Dump() to debug during late
Python finalization.
This commit is contained in:
Victor Stinner 2020-04-07 16:07:42 +02:00 committed by GitHub
parent 74e1b6b100
commit d8acf0d9aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 0 deletions

View File

@ -0,0 +1,4 @@
str.encode() and str.decode() no longer check the encoding and errors in
development mode or in debug mode during Python finalization. The codecs
machinery can no longer work on very late calls to str.encode() and
str.decode().

View File

@ -451,6 +451,12 @@ unicode_check_encoding_errors(const char *encoding, const char *errors)
return 0;
}
/* Disable checks during Python finalization. For example, it allows to
call _PyObject_Dump() during finalization for debugging purpose. */
if (interp->finalizing) {
return 0;
}
if (encoding != NULL) {
PyObject *handler = _PyCodec_Lookup(encoding);
if (handler == NULL) {