bpo-30281: Fix the default value for stop in PySlice_Unpack() (#1480)… · python/cpython@98b49a0 (original) (raw)

Original file line number Diff line number Diff line change
@@ -197,6 +197,8 @@ PySlice_Unpack(PyObject *_r,
197 197 PySliceObject *r = (PySliceObject*)_r;
198 198 /* this is harder to get right than you might think */
199 199
200 +Py_BUILD_ASSERT(PY_SSIZE_T_MIN + 1 <= -PY_SSIZE_T_MAX);
201 +
200 202 if (r->step == Py_None) {
201 203 *step = 1;
202 204 }
@@ -217,14 +219,14 @@ PySlice_Unpack(PyObject *_r,
217 219 }
218 220
219 221 if (r->start == Py_None) {
220 -*start = *step < 0 ? PY_SSIZE_T_MAX-1 : 0;;
222 +*start = *step < 0 ? PY_SSIZE_T_MAX : 0;
221 223 }
222 224 else {
223 225 if (!_PyEval_SliceIndex(r->start, start)) return -1;
224 226 }
225 227
226 228 if (r->stop == Py_None) {
227 -*stop = *step < 0 ? -PY_SSIZE_T_MAX : PY_SSIZE_T_MAX;
229 +*stop = *step < 0 ? PY_SSIZE_T_MIN : PY_SSIZE_T_MAX;
228 230 }
229 231 else {
230 232 if (!_PyEval_SliceIndex(r->stop, stop)) return -1;
@@ -258,7 +260,7 @@ PySlice_AdjustIndices(Py_ssize_t length,
258 260 *stop = (step < 0) ? -1 : 0;
259 261 }
260 262 }
261 -else if (*stop >= length) {
263 +else if (*stop >= length) {
262 264 *stop = (step < 0) ? length - 1 : length;
263 265 }
264 266