aboutsummaryrefslogtreecommitdiff
path: root/Python/initconfig.c
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2020-11-24 14:07:32 +0200
committerGitHub <noreply@github.com>2020-11-24 14:07:32 +0200
commit14d81dcaf827f6b66bda45e8f5689d07d7d5735c (patch)
tree41e4993155fc22fa507ed89b9311a37f9e1f3aee /Python/initconfig.c
parentc0c23ea72b76b06b7db0d09415fa90bab8ded63a (diff)
downloadcpython3-14d81dcaf827f6b66bda45e8f5689d07d7d5735c.tar.gz
bpo-42260: Improve error handling in _PyConfig_FromDict (GH-23488)
Diffstat (limited to 'Python/initconfig.c')
-rw-r--r--Python/initconfig.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/Python/initconfig.c b/Python/initconfig.c
index 1fcc3600aa..4d95ac5d88 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;