Skip to content

Incorrect handling of negative start values on PyUnicodeErrorObject#123378

@picnixz

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