bpo-41215: Don't use NULL by default in the PEG parser keyword list (GH-21355)
Automerge-Triggered-By: @lysnikolaou
diff --git a/Parser/parser.c b/Parser/parser.c
index bfd5c47..75dc717 100644
--- a/Parser/parser.c
+++ b/Parser/parser.c
@@ -9,8 +9,8 @@
#endif
static const int n_keyword_lists = 9;
static KeywordToken *reserved_keywords[] = {
- NULL,
- NULL,
+ (KeywordToken[]) {{NULL, -1}},
+ (KeywordToken[]) {{NULL, -1}},
(KeywordToken[]) {
{"if", 510},
{"in", 518},
diff --git a/Parser/pegen.c b/Parser/pegen.c
index 53e3d49..42f9e0c 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -525,10 +525,13 @@
static int
_get_keyword_or_name_type(Parser *p, const char *name, int name_len)
{
- if (name_len >= p->n_keyword_lists || p->keywords[name_len] == NULL) {
+ assert(name_len != 0);
+ if (name_len >= p->n_keyword_lists ||
+ p->keywords[name_len] == NULL ||
+ p->keywords[name_len]->type == -1) {
return NAME;
}
- for (KeywordToken *k = p->keywords[name_len]; k->type != -1; k++) {
+ for (KeywordToken *k = p->keywords[name_len]; k != NULL && k->type != -1; k++) {
if (strncmp(k->str, name, name_len) == 0) {
return k->type;
}