Bug report
Bug description:
Found when implementing #123343. We have:
int PyUnicodeEncodeError_GetStart(PyObject *exc, Py_ssize_t *start) { Py_ssize_t size; PyObject *obj = get_unicode(((PyUnicodeErrorObject *)exc)->object, "object"); if (!obj) return -1; *start = ((PyUnicodeErrorObject *)exc)->start; size = PyUnicode_GET_LENGTH(obj); if (*start<0) *start = 0; /*XXX check for values <0*/ if (*start>=size) *start = size-1; Py_DECREF(obj); return 0; }
The line *start = size-1 might set start to -1 when start = 0, in which case this leads to assertion failures when the index is used normally.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Linked PRs
- gh-123378: fix a crash in
UnicodeError.__str__#124935 - [3.12] gh-123378: fix a crash in
UnicodeError.__str__(GH-124935) #125098 - [3.13] gh-123378: fix a crash in
UnicodeError.__str__(GH-124935) #125099 - gh-123378: fix some corner cases of
startandendvalues inPyUnicodeErrorObject#123380 - gh-123378: fix post-merge typos in comments and NEWS #127739