From: Todd C. Miller Date: Fri, 30 Mar 2012 17:35:36 +0000 (-0400) Subject: cast ctype(3) function/macro arguments from char to unsigned char to X-Git-Tag: SUDO_1_7_9p1~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a392c1b05a76bed90749a0d9675cba5adbd1641c;p=sudo cast ctype(3) function/macro arguments from char to unsigned char to avoid potential negative subscripting. --HG-- branch : 1.7 --- diff --git a/fnmatch.c b/fnmatch.c index a7228f4ce..401e32e0e 100644 --- a/fnmatch.c +++ b/fnmatch.c @@ -125,7 +125,7 @@ classmatch(pattern, test, foldcase, ep) pattern = "lower:]"; for (cc = cclasses; cc->name != NULL; cc++) { if (!strncmp(pattern, cc->name, len) && cc->name[len] == '\0') { - if (cc->isctype(test)) + if (cc->isctype((unsigned char)test)) rval = RANGE_MATCH; break; } @@ -225,10 +225,11 @@ leadingclosebrace: /* XXX: handle locale/MBCS comparison, advance by MBCS char width */ if ((**string >= *startch) && (**string <= **pattern)) result = 0; - else if (nocase && (isupper(**string) || isupper(*startch) - || isupper(**pattern)) - && (tolower(**string) >= tolower(*startch)) - && (tolower(**string) <= tolower(**pattern))) + else if (nocase && (isupper((unsigned char)**string) || + isupper((unsigned char)*startch) || + isupper((unsigned char)**pattern)) + && (tolower((unsigned char)**string) >= tolower((unsigned char)*startch)) + && (tolower((unsigned char)**string) <= tolower((unsigned char)**pattern))) result = 0; ++*pattern; @@ -238,8 +239,9 @@ leadingclosebrace: /* XXX: handle locale/MBCS comparison, advance by MBCS char width */ if ((**string == **pattern)) result = 0; - else if (nocase && (isupper(**string) || isupper(**pattern)) - && (tolower(**string) == tolower(**pattern))) + else if (nocase && (isupper((unsigned char)**string) || + isupper((unsigned char)**pattern)) + && (tolower((unsigned char)**string) == tolower((unsigned char)**pattern))) result = 0; ++*pattern; @@ -265,8 +267,8 @@ leadingclosebrace: /* XXX: handle locale/MBCS comparison, advance by the MBCS char width */ if (**string == **pattern) result = 0; - else if (nocase && (isupper(**string) || isupper(**pattern)) - && (tolower(**string) == tolower(**pattern))) + else if (nocase && (isupper((unsigned char)**string) || isupper((unsigned char)**pattern)) + && (tolower((unsigned char)**string) == tolower((unsigned char)**pattern))) result = 0; /* Refuse to advance over trailing slash or nulls