From 14d81dcaf827f6b66bda45e8f5689d07d7d5735c Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 24 Nov 2020 14:07:32 +0200 Subject: bpo-42260: Improve error handling in _PyConfig_FromDict (GH-23488) --- Python/initconfig.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Python/initconfig.c b/Python/initconfig.c index 1fcc360..4d95ac5 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -1050,8 +1050,8 @@ fail: 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; -- cgit v0.12