[Python-checkins] Fix CID-1414686: PyInit_readline() handles errors (#4647)

Victor Stinner webhook-mailer at python.org
Thu Nov 30 11:21:11 EST 2017


https://github.com/python/cpython/commit/0efc0249ca1fd0675098957407fbba2c0f6949ce
commit: 0efc0249ca1fd0675098957407fbba2c0f6949ce
branch: master
author: Victor Stinner <victor.stinner at gmail.com>
committer: GitHub <noreply at github.com>
date: 2017-11-30T17:21:07+01:00
summary:

Fix CID-1414686: PyInit_readline() handles errors (#4647)

Handle PyModule_AddIntConstant() and PyModule_AddStringConstant()
failures. Add also constants before calling setup_readline(), since
setup_readline() registers callbacks which uses a reference to the
module, whereas the module is destroyed if adding constants fails.

Fix Coverity warning:

CID 1414686: Unchecked return value (CHECKED_RETURN)
2. check_return: Calling PyModule_AddStringConstant without checking
return value (as is done elsewhere 45 out of 55 times).

files:
M Modules/readline.c

diff --git a/Modules/readline.c b/Modules/readline.c
index d0e3b913e57..811fca8cd92 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -1352,13 +1352,27 @@ PyInit_readline(void)
     if (m == NULL)
         return NULL;
 
+    if (PyModule_AddIntConstant(m, "_READLINE_VERSION",
+                                RL_READLINE_VERSION) < 0) {
+        goto error;
+    }
+    if (PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION",
+                                rl_readline_version) < 0) {
+        goto error;
+    }
+    if (PyModule_AddStringConstant(m, "_READLINE_LIBRARY_VERSION",
+                                   rl_library_version) < 0)
+    {
+        goto error;
+    }
+
     mod_state = (readlinestate *) PyModule_GetState(m);
     PyOS_ReadlineFunctionPointer = call_readline;
     setup_readline(mod_state);
 
-    PyModule_AddIntConstant(m, "_READLINE_VERSION", RL_READLINE_VERSION);
-    PyModule_AddIntConstant(m, "_READLINE_RUNTIME_VERSION", rl_readline_version);
-    PyModule_AddStringConstant(m, "_READLINE_LIBRARY_VERSION", rl_library_version);
-
     return m;
+
+error:
+    Py_DECREF(m);
+    return NULL;
 }



More information about the Python-checkins mailing list