summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2020-03-09 18:03:38 (GMT)
committerGitHub <noreply@github.com>2020-03-09 18:03:38 (GMT)
commite5ccc94bbb153431698b2391df625e8d47a93276 (patch)
tree82c6656cd615dc3ae3311d42d2ef580fa1d8e4d8 /Objects
parent413f01352a8268fb62bb47bde965462d7b82a06a (diff)
downloadcpython-e5ccc94bbb153431698b2391df625e8d47a93276.zip
cpython-e5ccc94bbb153431698b2391df625e8d47a93276.tar.gz
cpython-e5ccc94bbb153431698b2391df625e8d47a93276.tar.bz2
bpo-38643: Raise SystemError instead of crashing when PyNumber_ToBase is called with invalid base. (GH-18863)
Diffstat (limited to 'Objects')
-rw-r--r--Objects/abstract.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c
index accd72d..f9be422 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -1551,18 +1551,15 @@ PyNumber_Float(PyObject *o)
PyObject *
PyNumber_ToBase(PyObject *n, int base)
{
- PyObject *res = NULL;
+ if (!(base == 2 || base == 8 || base == 10 || base == 16)) {
+ PyErr_SetString(PyExc_SystemError,
+ "PyNumber_ToBase: base must be 2, 8, 10 or 16");
+ return NULL;
+ }
PyObject *index = PyNumber_Index(n);
-
if (!index)
return NULL;
- if (PyLong_Check(index))
- res = _PyLong_Format(index, base);
- else
- /* It should not be possible to get here, as
- PyNumber_Index already has a check for the same
- condition */
- PyErr_SetString(PyExc_ValueError, "PyNumber_ToBase: index not int");
+ PyObject *res = _PyLong_Format(index, base);
Py_DECREF(index);
return res;
}