@@ -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 |
|