diff options
| author | Nice Zombies <nineteendo19d0@gmail.com> | 2024-12-11 09:09:34 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-11 09:09:34 (GMT) |
| commit | 487a51a1b981211c091caa2026da81cc0df7096c (patch) | |
| tree | baae409dc5649657ac4c9766f58372681f1b1cda /Python/pythonrun.c | |
| parent | 20c0c8cf3849e94ab75f95e760158c398de334f2 (diff) | |
| download | cpython-487a51a1b981211c091caa2026da81cc0df7096c.zip cpython-487a51a1b981211c091caa2026da81cc0df7096c.tar.gz cpython-487a51a1b981211c091caa2026da81cc0df7096c.tar.bz2 | |
[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>
Diffstat (limited to 'Python/pythonrun.c')
| -rw-r--r-- | Python/pythonrun.c | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 5f3d249..cf84573 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -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) |
