summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikita Sobolev <mail@sobolevn.me>2023-04-23 00:08:27 (GMT)
committerGitHub <noreply@github.com>2023-04-23 00:08:27 (GMT)
commit0fd38917582aae0728e20d8a641e56d9be9270c7 (patch)
tree94f2f8734143c52e4854c5a567e507b275df7b59
parent7bf94568a9a4101c72b8bf555a811028e5b45ced (diff)
downloadcpython-0fd38917582aae0728e20d8a641e56d9be9270c7.zip
cpython-0fd38917582aae0728e20d8a641e56d9be9270c7.tar.gz
cpython-0fd38917582aae0728e20d8a641e56d9be9270c7.tar.bz2
gh-102310: Change error range for invalid bytes literals (#103663)
-rw-r--r--Lib/test/test_syntax.py24
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2023-04-21-17-03-14.gh-issue-102310.anLjDx.rst1
-rw-r--r--Parser/string_parser.c3
3 files changed, 27 insertions, 1 deletions
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index f236535..f959bbb 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -1853,6 +1853,30 @@ x: *b
Traceback (most recent call last):
...
SyntaxError: invalid syntax
+
+Invalid bytes literals:
+
+ >>> b"Ā"
+ Traceback (most recent call last):
+ ...
+ b"Ā"
+ ^^^
+ SyntaxError: bytes can only contain ASCII literal characters
+
+ >>> b"абвгде"
+ Traceback (most recent call last):
+ ...
+ b"абвгде"
+ ^^^^^^^^
+ SyntaxError: bytes can only contain ASCII literal characters
+
+ >>> b"abc ъющый" # first 3 letters are ascii
+ Traceback (most recent call last):
+ ...
+ b"abc ъющый"
+ ^^^^^^^^^^^
+ SyntaxError: bytes can only contain ASCII literal characters
+
"""
import re
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-04-21-17-03-14.gh-issue-102310.anLjDx.rst b/Misc/NEWS.d/next/Core and Builtins/2023-04-21-17-03-14.gh-issue-102310.anLjDx.rst
new file mode 100644
index 0000000..15cb6c6
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-04-21-17-03-14.gh-issue-102310.anLjDx.rst
@@ -0,0 +1 @@
+Change the error range for invalid bytes literals.
diff --git a/Parser/string_parser.c b/Parser/string_parser.c
index be5f0c4..d4ce338 100644
--- a/Parser/string_parser.c
+++ b/Parser/string_parser.c
@@ -248,7 +248,8 @@ _PyPegen_parse_string(Parser *p, Token *t)
const char *ch;
for (ch = s; *ch; ch++) {
if (Py_CHARMASK(*ch) >= 0x80) {
- RAISE_SYNTAX_ERROR(
+ RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
+ t,
"bytes can only contain ASCII "
"literal characters");
return NULL;