Skip to content

Incorrect handling of negative start values on PyUnicodeErrorObject #123378

Description

@picnixz

Bug report

Bug description:

Found when implementing #123343. We have:

intPyUnicodeEncodeError_GetStart(PyObject*exc, Py_ssize_t*start)
{
Py_ssize_tsize;
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);
return0;
}

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

Metadata

Metadata

Assignees

Labels

3.14bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)topic-C-APItype-bugAn unexpected behavior, bug, or errortype-crashA hard crash of the interpreter, possibly with a core dump

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions