regcomp: use unsigned char when testing for escapes

- cast GETNEXT to unsigned where it is being promoted to int to prevent
  sign-extension (really it would have been better for PEEK*() and
  GETNEXT() to return unsigned char; this would have removed a ton of
  (uch) casts, but it is too intrusive for now).
- fix an isalpha that should have been iswalpha

PR:		264275, 274032
Reviewed by:	kevans, eugen (previous version)
Obtained from:	NetBSD

(cherry picked from commit 3fb80f1476c7776f04ba7ef6d08397cef6abcfb0)
This commit is contained in:
Christos Zoulas 2023-08-30 20:37:24 +00:00 committed by Kyle Evans
parent 803f088147
commit 56b09feb23

View file

@ -828,10 +828,10 @@ p_simp_re(struct parse *p, struct branchc *bc)
handled = false;
assert(MORE()); /* caller should have ensured this */
c = GETNEXT();
c = (uch)GETNEXT();
if (c == '\\') {
(void)REQUIRE(MORE(), REG_EESCAPE);
cc = GETNEXT();
cc = (uch)GETNEXT();
c = BACKSL | cc;
#ifdef LIBREGEX
if (p->gnuext) {
@ -992,7 +992,7 @@ p_count(struct parse *p)
int ndigits = 0;
while (MORE() && isdigit((uch)PEEK()) && count <= DUPMAX) {
count = count*10 + (GETNEXT() - '0');
count = count*10 + ((uch)GETNEXT() - '0');
ndigits++;
}
@ -1302,7 +1302,7 @@ may_escape(struct parse *p, const wint_t ch)
if ((p->pflags & PFLAG_LEGACY_ESC) != 0)
return (true);
if (isalpha(ch) || ch == '\'' || ch == '`')
if (iswalpha(ch) || ch == '\'' || ch == '`')
return (false);
return (true);
#ifdef NOTYET