https://github.com/python/cpython/commit/015b97d19a24a169cc3c0939119e1228791e4253
commit: 015b97d19a24a169cc3c0939119e1228791e4253
branch: main
author: Pablo Galindo Salgado <[email protected]>
committer: pablogsal <[email protected]>
date: 2024-02-26T12:57:09Z
summary:
gh-115823: Calculate correctly error locations when dealing with implicit
encodings (#115824)
files:
A Misc/NEWS.d/next/Core and
Builtins/2024-02-22-16-17-53.gh-issue-115823.c1TreJ.rst
M Lib/test/test_exceptions.py
M Parser/pegen_errors.c
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index c7e76414ff0715..c5eff8ad8ccca1 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -301,6 +301,7 @@ def baz():
{
6
0="""''', 5, 13)
+ check('b"fooжжж"'.encode(), 1, 1, 1, 10)
# Errors thrown by symtable.c
check('x = [(yield i) for i in range(3)]', 1, 7)
diff --git a/Misc/NEWS.d/next/Core and
Builtins/2024-02-22-16-17-53.gh-issue-115823.c1TreJ.rst b/Misc/NEWS.d/next/Core
and Builtins/2024-02-22-16-17-53.gh-issue-115823.c1TreJ.rst
new file mode 100644
index 00000000000000..8cda4c9343d4d7
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and
Builtins/2024-02-22-16-17-53.gh-issue-115823.c1TreJ.rst
@@ -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
diff --git a/Parser/pegen_errors.c b/Parser/pegen_errors.c
index e15673d02dd3b0..e8f11a67e50fa0 100644
--- a/Parser/pegen_errors.c
+++ b/Parser/pegen_errors.c
@@ -369,20 +369,18 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject
*errtype,
Py_ssize_t col_number = 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);
- if (col_number < 0) {
+ col_number = _PyPegen_byte_offset_to_character_offset(error_line,
col_offset);
+ 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;
}
- 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);
if (!tmp) {
goto error;
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]