bpo-40792: Make the result of PyNumber_Index() always having exact type int. (GH-20443)

Previously, the result could have been an instance of a subclass of int.

Also revert bpo-26202 and make attributes start, stop and step of the range
object having exact type int.

Add private function _PyNumber_Index() which preserves the old behavior
of PyNumber_Index() for performance to use it in the conversion functions
like PyLong_AsLong().
This commit is contained in:
Serhiy Storchaka 2020-05-28 10:33:45 +03:00 committed by GitHub
parent eaca2aa117
commit 5f4b229df7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
51 changed files with 187 additions and 187 deletions

View file

@ -531,7 +531,7 @@ _Py_Uid_Converter(PyObject *obj, void *p)
long result;
unsigned long uresult;
index = PyNumber_Index(obj);
index = _PyNumber_Index(obj);
if (index == NULL) {
PyErr_Format(PyExc_TypeError,
"uid should be integer, not %.200s",
@ -637,7 +637,7 @@ _Py_Gid_Converter(PyObject *obj, void *p)
long result;
unsigned long uresult;
index = PyNumber_Index(obj);
index = _PyNumber_Index(obj);
if (index == NULL) {
PyErr_Format(PyExc_TypeError,
"gid should be integer, not %.200s",
@ -771,7 +771,7 @@ _fd_converter(PyObject *o, int *p)
int overflow;
long long_value;
PyObject *index = PyNumber_Index(o);
PyObject *index = _PyNumber_Index(o);
if (index == NULL) {
return 0;
}