mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
[3.12] gh-115823: Calculate correctly error locations when dealing with implicit encodings (GH-115824) (#115949)
gh-115823: Calculate correctly error locations when dealing with implicit encodings (GH-115824)
(cherry picked from commit 015b97d19a
)
Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
This commit is contained in:
parent
8668b3cc2d
commit
1932da0c3d
3 changed files with 13 additions and 11 deletions
|
@ -301,6 +301,7 @@ class ExceptionTests(unittest.TestCase):
|
||||||
{
|
{
|
||||||
6
|
6
|
||||||
0="""''', 5, 13)
|
0="""''', 5, 13)
|
||||||
|
check('b"fooжжж"'.encode(), 1, 1, 1, 10)
|
||||||
|
|
||||||
# Errors thrown by symtable.c
|
# Errors thrown by symtable.c
|
||||||
check('x = [(yield i) for i in range(3)]', 1, 7)
|
check('x = [(yield i) for i in range(3)]', 1, 7)
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Properly calculate error ranges in the parser when raising
|
||||||
|
:exc:`SyntaxError` exceptions caused by invalid byte sequences. Patch by
|
||||||
|
Pablo Galindo
|
|
@ -367,20 +367,18 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype,
|
||||||
Py_ssize_t col_number = col_offset;
|
Py_ssize_t col_number = col_offset;
|
||||||
Py_ssize_t end_col_number = end_col_offset;
|
Py_ssize_t end_col_number = end_col_offset;
|
||||||
|
|
||||||
if (p->tok->encoding != NULL) {
|
col_number = _PyPegen_byte_offset_to_character_offset(error_line, col_offset);
|
||||||
col_number = _PyPegen_byte_offset_to_character_offset(error_line, col_offset);
|
if (col_number < 0) {
|
||||||
if (col_number < 0) {
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (end_col_offset > 0) {
|
||||||
|
end_col_number = _PyPegen_byte_offset_to_character_offset(error_line, end_col_offset);
|
||||||
|
if (end_col_number < 0) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (end_col_number > 0) {
|
|
||||||
Py_ssize_t end_col_offset = _PyPegen_byte_offset_to_character_offset(error_line, end_col_number);
|
|
||||||
if (end_col_offset < 0) {
|
|
||||||
goto error;
|
|
||||||
} else {
|
|
||||||
end_col_number = end_col_offset;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = Py_BuildValue("(OnnNnn)", p->tok->filename, lineno, col_number, error_line, end_lineno, end_col_number);
|
tmp = Py_BuildValue("(OnnNnn)", p->tok->filename, lineno, col_number, error_line, end_lineno, end_col_number);
|
||||||
if (!tmp) {
|
if (!tmp) {
|
||||||
goto error;
|
goto error;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue