From ead9e56eb214ad082ef4689afb8600d3e9d24727 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 27 Sep 2004 22:03:42 +0000 Subject: [PATCH] (add_param): Fix bug where NUL was mishandled. Avoid the use of strchr to avoid future recurrences. --- src/parse-gram.y | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/parse-gram.y b/src/parse-gram.y index 40117c53..5dec642d 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -472,29 +472,27 @@ lloc_default (YYLTYPE const *rhs, int n) static void add_param (char const *type, char *decl, location loc) { - static char const alphanum[] = - "0123456789" + static char const alphanum[26 + 26 + 1 + 10] = "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "_"; - static char const blank[] = " \t"; - char const *alpha = alphanum + 10; + "_" + "0123456789"; char const *name_start = NULL; char *p; for (p = decl; *p; p++) - if ((p == decl || ! strchr (alphanum, p[-1])) && strchr (alpha, p[0])) + if ((p == decl + || ! memchr (alphanum, p[-1], sizeof alphanum)) + && memchr (alphanum, p[0], sizeof alphanum - 10)) name_start = p; - /* Strip the surrounding '{' and '}'. */ - decl++; - *--p = '\0'; - - /* Strip surrounding white spaces. */ - while (strchr (blank, *decl)) - ++decl; - while (strchr (blank, p[-1])) - *--p = '\0'; + /* Strip the surrounding '{' and '}', and any blanks just inside + the braces. */ + while (*--p == ' ' || *p == '\t') + continue; + *p = '\0'; + while (*++decl == ' ' || *decl == '\t') + continue; if (! name_start) complain_at (loc, _("missing identifier in parameter declaration")); @@ -504,7 +502,7 @@ add_param (char const *type, char *decl, location loc) size_t name_len; for (name_len = 1; - name_start[name_len] && strchr (alphanum, name_start[name_len]); + memchr (alphanum, name_start[name_len], sizeof alphanum); name_len++) continue; -- 2.47.2