aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristos Zoulas <christos@NetBSD.org>2023-08-30 20:37:24 +0000
committerEd Maste <emaste@FreeBSD.org>2023-11-08 01:02:08 +0000
commit5e0387e2ec6ed9b14b3c6088c19079db15a52eae (patch)
treefecf726527b1d5c8ef4372fac76db588064819c6
parente648a628a66a09973154b442ac1266316be20506 (diff)
downloadsrc-5e0387e2ec6ed9b14b3c6088c19079db15a52eae.tar.gz
src-5e0387e2ec6ed9b14b3c6088c19079db15a52eae.zip
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) (cherry picked from commit 56b09feb23d98fcd0c4aed8d4f907a5a2f6b5ea9) Approved by: so Security: FreeBSD-EN-23:14
-rw-r--r--lib/libc/regex/regcomp.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/lib/libc/regex/regcomp.c b/lib/libc/regex/regcomp.c
index fc66ea32046a..e93ea02f5873 100644
--- a/lib/libc/regex/regcomp.c
+++ b/lib/libc/regex/regcomp.c
@@ -814,10 +814,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) {
@@ -978,7 +978,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++;
}
@@ -1288,7 +1288,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