bpo-38631: Avoid Py_FatalError() in readline (GH-16998)

readline now calls PyErr_NoMemory() rather than Py_FatalError() on
memory allocation failure, when importing the module.
This commit is contained in:
Victor Stinner 2019-10-30 16:39:27 +01:00 committed by GitHub
parent a4ed6ed9f3
commit 1d8da61f5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 6 deletions

View File

@ -1066,15 +1066,16 @@ done:
}
/* Helper to initialize GNU readline properly. */
static void
/* Helper to initialize GNU readline properly.
Return -1 on memory allocation failure, return 0 on success. */
static int
setup_readline(readlinestate *mod_state)
{
#ifdef SAVE_LOCALE
char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
if (!saved_locale)
Py_FatalError("not enough memory to save locale");
if (!saved_locale) {
return -1;
}
#endif
/* The name must be defined before initialization */
@ -1156,6 +1157,7 @@ setup_readline(readlinestate *mod_state)
rl_initialize();
RESTORE_LOCALE(saved_locale)
return 0;
}
/* Wrapper around GNU readline that handles signals differently. */
@ -1369,7 +1371,10 @@ PyInit_readline(void)
mod_state = (readlinestate *) PyModule_GetState(m);
PyOS_ReadlineFunctionPointer = call_readline;
setup_readline(mod_state);
if (setup_readline(mod_state) < 0) {
PyErr_NoMemory();
goto error;
}
return m;