From d9cc92f584084e320bc8e1f437fd46843924762f Mon Sep 17 00:00:00 2001 From: Bill Paul Date: Sun, 16 Nov 1997 03:02:39 +0000 Subject: Close PR #4867: improve _listmatch() to avoid returning false positives. PR: 4867 --- lib/libc/gen/getnetgrent.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/libc/gen/getnetgrent.c b/lib/libc/gen/getnetgrent.c index 605dd500e422..cc04f2f0d7bb 100644 --- a/lib/libc/gen/getnetgrent.c +++ b/lib/libc/gen/getnetgrent.c @@ -276,17 +276,24 @@ endnetgrent() #ifdef YP static int _listmatch(list, group, len) -char *list, *group; -int len; + char *list, *group; + int len; { - char *ptr = list; - - while ( (ptr = strstr(ptr, group)) ) { - - ptr += strlen(group); - - if (*ptr == ',' || *ptr == '\0') + char *ptr = list, *cptr; + int glen = strlen(group); + + /* skip possible leading whitespace */ + while(isspace(*ptr)) + ptr++; + + while (ptr < list + len) { + cptr = ptr; + while(*ptr != ',' && !isspace(*ptr)) + ptr++; + if (strncmp(cptr, group, glen) == 0 && glen == (ptr - cptr)) return(1); + while(*ptr == ',' || isspace(*ptr)) + ptr++; } return(0); -- cgit v1.3