mirror of
https://github.com/python/cpython.git
synced 2025-07-19 01:05:26 +00:00
bpo-29935: Fixed error messages in the index() method of tuple, list and deque (#887)
when pass indices of wrong type.
This commit is contained in:
parent
762ec97ea6
commit
d4edfc9abf
8 changed files with 31 additions and 19 deletions
|
@ -4892,14 +4892,10 @@ do_call_core(PyObject *func, PyObject *callargs, PyObject *kwdict)
|
|||
and silently boost values less than -PY_SSIZE_T_MAX-1 to -PY_SSIZE_T_MAX-1.
|
||||
Return 0 on error, 1 on success.
|
||||
*/
|
||||
/* Note: If v is NULL, return success without storing into *pi. This
|
||||
is because_PyEval_SliceIndex() is called by apply_slice(), which can be
|
||||
called by the SLICE opcode with v and/or w equal to NULL.
|
||||
*/
|
||||
int
|
||||
_PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
|
||||
{
|
||||
if (v != NULL) {
|
||||
if (v != Py_None) {
|
||||
Py_ssize_t x;
|
||||
if (PyIndex_Check(v)) {
|
||||
x = PyNumber_AsSsize_t(v, NULL);
|
||||
|
@ -4918,9 +4914,22 @@ _PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
|
|||
}
|
||||
|
||||
int
|
||||
_PyEval_SliceIndexOrNone(PyObject *v, Py_ssize_t *pi)
|
||||
_PyEval_SliceIndexNotNone(PyObject *v, Py_ssize_t *pi)
|
||||
{
|
||||
return v == Py_None || _PyEval_SliceIndex(v, pi);
|
||||
Py_ssize_t x;
|
||||
if (PyIndex_Check(v)) {
|
||||
x = PyNumber_AsSsize_t(v, NULL);
|
||||
if (x == -1 && PyErr_Occurred())
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"slice indices must be integers or "
|
||||
"have an __index__ method");
|
||||
return 0;
|
||||
}
|
||||
*pi = x;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue