mirror of
https://github.com/python/cpython.git
synced 2025-07-13 14:25:18 +00:00
[3.12] gh-111609: end_offset
is ignored in subclasses of SyntaxError (#127554)
* `end_offset` is ignored in subclasses of SyntaxError * 📜🤖 Added by blurb_it. * Add test --------- Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
This commit is contained in:
parent
20c0c8cf38
commit
487a51a1b9
3 changed files with 45 additions and 34 deletions
|
@ -538,43 +538,37 @@ parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename,
|
|||
*offset = hold;
|
||||
}
|
||||
|
||||
if (Py_TYPE(err) == (PyTypeObject*)PyExc_SyntaxError) {
|
||||
v = PyObject_GetAttr(err, &_Py_ID(end_lineno));
|
||||
if (!v) {
|
||||
PyErr_Clear();
|
||||
*end_lineno = *lineno;
|
||||
}
|
||||
else if (v == Py_None) {
|
||||
*end_lineno = *lineno;
|
||||
Py_DECREF(v);
|
||||
} else {
|
||||
hold = PyLong_AsSsize_t(v);
|
||||
Py_DECREF(v);
|
||||
if (hold < 0 && PyErr_Occurred())
|
||||
goto finally;
|
||||
*end_lineno = hold;
|
||||
}
|
||||
|
||||
v = PyObject_GetAttr(err, &_Py_ID(end_offset));
|
||||
if (!v) {
|
||||
PyErr_Clear();
|
||||
*end_offset = -1;
|
||||
}
|
||||
else if (v == Py_None) {
|
||||
*end_offset = -1;
|
||||
Py_DECREF(v);
|
||||
} else {
|
||||
hold = PyLong_AsSsize_t(v);
|
||||
Py_DECREF(v);
|
||||
if (hold < 0 && PyErr_Occurred())
|
||||
goto finally;
|
||||
*end_offset = hold;
|
||||
}
|
||||
} else {
|
||||
// SyntaxError subclasses
|
||||
v = PyObject_GetAttr(err, &_Py_ID(end_lineno));
|
||||
if (!v) {
|
||||
PyErr_Clear();
|
||||
*end_lineno = *lineno;
|
||||
}
|
||||
else if (v == Py_None) {
|
||||
*end_lineno = *lineno;
|
||||
Py_DECREF(v);
|
||||
} else {
|
||||
hold = PyLong_AsSsize_t(v);
|
||||
Py_DECREF(v);
|
||||
if (hold < 0 && PyErr_Occurred())
|
||||
goto finally;
|
||||
*end_lineno = hold;
|
||||
}
|
||||
|
||||
v = PyObject_GetAttr(err, &_Py_ID(end_offset));
|
||||
if (!v) {
|
||||
PyErr_Clear();
|
||||
*end_offset = -1;
|
||||
}
|
||||
else if (v == Py_None) {
|
||||
*end_offset = -1;
|
||||
Py_DECREF(v);
|
||||
} else {
|
||||
hold = PyLong_AsSsize_t(v);
|
||||
Py_DECREF(v);
|
||||
if (hold < 0 && PyErr_Occurred())
|
||||
goto finally;
|
||||
*end_offset = hold;
|
||||
}
|
||||
|
||||
v = PyObject_GetAttr(err, &_Py_ID(text));
|
||||
if (!v)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue