bpo-30281: Fix the default value for stop in PySlice_Unpack() (#1531) (#1480)
diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c
index 64be927..c66e057 100644
--- a/Objects/sliceobject.c
+++ b/Objects/sliceobject.c
@@ -137,6 +137,8 @@
PySliceObject *r = (PySliceObject *)_r;
/* this is harder to get right than you might think */
+ assert(PY_SSIZE_T_MIN + 1 <= -PY_SSIZE_T_MAX);
+
if (r->step == Py_None) {
*step = 1;
}
@@ -157,14 +159,14 @@
}
if (r->start == Py_None) {
- *start = *step < 0 ? PY_SSIZE_T_MAX-1 : 0;;
+ *start = *step < 0 ? PY_SSIZE_T_MAX : 0;
}
else {
if (!_PyEval_SliceIndex(r->start, start)) return -1;
}
if (r->stop == Py_None) {
- *stop = *step < 0 ? -PY_SSIZE_T_MAX : PY_SSIZE_T_MAX;
+ *stop = *step < 0 ? PY_SSIZE_T_MIN : PY_SSIZE_T_MAX;
}
else {
if (!_PyEval_SliceIndex(r->stop, stop)) return -1;
@@ -198,7 +200,7 @@
*stop = (step < 0) ? -1 : 0;
}
}
- else if (*stop >= length) {
+ else if (*stop >= length) {
*stop = (step < 0) ? length - 1 : length;
}
diff --git a/Python/ceval.c b/Python/ceval.c
index cea503e..4e4adc2 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -4679,7 +4679,7 @@
/* Extract a slice index from a PyInt or PyLong or an object with the
nb_index slot defined, and store in *pi.
Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
- and silently boost values less than -PY_SSIZE_T_MAX-1 to -PY_SSIZE_T_MAX-1.
+ and silently boost values less than PY_SSIZE_T_MIN to PY_SSIZE_T_MIN.
Return 0 on error, 1 on success.
*/
/* Note: If v is NULL, return success without storing into *pi. This