diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2020-03-09 18:03:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-09 18:03:38 (GMT) |
commit | e5ccc94bbb153431698b2391df625e8d47a93276 (patch) | |
tree | 82c6656cd615dc3ae3311d42d2ef580fa1d8e4d8 /Objects | |
parent | 413f01352a8268fb62bb47bde965462d7b82a06a (diff) | |
download | cpython-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.c | 15 |
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; } |