gh-130077: Properly match full soft keywords in the parser (#135317)

This commit is contained in:
Pablo Galindo Salgado 2025-06-10 14:19:03 +01:00 committed by GitHub
parent 598aa7cc98
commit ff2b5f40c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 1 deletions

View File

@ -382,6 +382,13 @@ SyntaxError: invalid syntax
Traceback (most recent call last): Traceback (most recent call last):
SyntaxError: invalid syntax SyntaxError: invalid syntax
# But prefixes of soft keywords should
# still raise specialized errors
>>> (mat x)
Traceback (most recent call last):
SyntaxError: invalid syntax. Perhaps you forgot a comma?
From compiler_complex_args(): From compiler_complex_args():
>>> def f(None=1): >>> def f(None=1):

View File

@ -0,0 +1,2 @@
Properly raise custom syntax errors when incorrect syntax containing names
that are prefixes of soft keywords is encountered. Patch by Pablo Galindo.

View File

@ -610,7 +610,8 @@ expr_ty _PyPegen_soft_keyword_token(Parser *p) {
Py_ssize_t size; Py_ssize_t size;
PyBytes_AsStringAndSize(t->bytes, &the_token, &size); PyBytes_AsStringAndSize(t->bytes, &the_token, &size);
for (char **keyword = p->soft_keywords; *keyword != NULL; keyword++) { for (char **keyword = p->soft_keywords; *keyword != NULL; keyword++) {
if (strncmp(*keyword, the_token, (size_t)size) == 0) { if (strlen(*keyword) == (size_t)size &&
strncmp(*keyword, the_token, (size_t)size) == 0) {
return _PyPegen_name_from_token(p, t); return _PyPegen_name_from_token(p, t);
} }
} }