[Python-checkins] bpo-42260: Improve error handling in _PyConfig_FromDict (GH-23488)

serhiy-storchaka webhook-mailer at python.org
Tue Nov 24 07:07:36 EST 2020


https://github.com/python/cpython/commit/14d81dcaf827f6b66bda45e8f5689d07d7d5735c
commit: 14d81dcaf827f6b66bda45e8f5689d07d7d5735c
branch: master
author: Serhiy Storchaka <storchaka at gmail.com>
committer: serhiy-storchaka <storchaka at gmail.com>
date: 2020-11-24T14:07:32+02:00
summary:

bpo-42260: Improve error handling in _PyConfig_FromDict (GH-23488)

files:
M Python/initconfig.c

diff --git a/Python/initconfig.c b/Python/initconfig.c
index 1fcc3600aa466..4d95ac5d8859b 100644
--- a/Python/initconfig.c
+++ b/Python/initconfig.c
@@ -1050,8 +1050,8 @@ _PyConfig_AsDict(const PyConfig *config)
 static PyObject*
 config_dict_get(PyObject *dict, const char *name)
 {
-    PyObject *item = PyDict_GetItemString(dict, name);
-    if (item == NULL) {
+    PyObject *item = _PyDict_GetItemStringWithError(dict, name);
+    if (item == NULL && !PyErr_Occurred()) {
         PyErr_Format(PyExc_ValueError, "missing config key: %s", name);
         return NULL;
     }
@@ -1085,7 +1085,7 @@ config_dict_get_int(PyObject *dict, const char *name, int *result)
         if (PyErr_ExceptionMatches(PyExc_TypeError)) {
             config_dict_invalid_type(name);
         }
-        else {
+        else if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
             config_dict_invalid_value(name);
         }
         return -1;
@@ -1104,7 +1104,12 @@ config_dict_get_ulong(PyObject *dict, const char *name, unsigned long *result)
     }
     unsigned long value = PyLong_AsUnsignedLong(item);
     if (value == (unsigned long)-1 && PyErr_Occurred()) {
-        config_dict_invalid_value(name);
+        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
+            config_dict_invalid_type(name);
+        }
+        else if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
+            config_dict_invalid_value(name);
+        }
         return -1;
     }
     *result = value;



More information about the Python-checkins mailing list