-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Closed
Labels
topic-C-APItype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or errortype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
Description
Bug report
PyImport_GetImporter()can return NULL with set or not set error. The latter happens only ifsys.path_hooksorsys.path_importer_cachewas deleted, or in more obscure cases: when string allocation for strings "path_hooks" or "path_importer_cache" fail, or thesysmodule was not yet created. These cases so obscure, that the user code most likely do not expect this. The only place wherePyImport_GetImporter()is used in Python itself expects an error to be set if NULL is returned.PyImport_GetImporter()can crash (in debug build) or raise SystemError ifsys.path_hooksis not a list orsys.path_importer_cacheis not a dict. Note that both are set to None in_PyImport_FiniExternal()(which is called inPy_FinalizeEx()andPy_EndInterpreter()).
Crash is unacceptable, so asserts should be replaced with runtime checks and raising an exception (RuntimeError looks suitable).
And I think that PyImport_GetImporter() should set RuntimeError when it fails to get sys.path_hooks or sys.path_importer_cache. It is the most common error in similar cases.
Linked PRs
Metadata
Metadata
Assignees
Labels
topic-C-APItype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or errortype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump