Module Name:    src
Committed By:   christos
Date:           Wed Jan  1 18:19:50 UTC 2025

Modified Files:
        src/lib/libc/regex: regcomp.c regex2.h

Log Message:
PR/58910: enh at google dot com: Fix signed character issue in character
ranges.


To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/lib/libc/regex/regcomp.c
cvs rdiff -u -r1.15 -r1.16 src/lib/libc/regex/regex2.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/regex/regcomp.c
diff -u src/lib/libc/regex/regcomp.c:1.48 src/lib/libc/regex/regcomp.c:1.49
--- src/lib/libc/regex/regcomp.c:1.48	Wed Aug 30 16:37:24 2023
+++ src/lib/libc/regex/regcomp.c	Wed Jan  1 13:19:50 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: regcomp.c,v 1.48 2023/08/30 20:37:24 christos Exp $	*/
+/*	$NetBSD: regcomp.c,v 1.49 2025/01/01 18:19:50 christos Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-3-Clause
@@ -51,7 +51,7 @@
 static char sccsid[] = "@(#)regcomp.c	8.5 (Berkeley) 3/20/94";
 __FBSDID("$FreeBSD: head/lib/libc/regex/regcomp.c 368359 2020-12-05 03:18:48Z kevans $");
 #endif
-__RCSID("$NetBSD: regcomp.c,v 1.48 2023/08/30 20:37:24 christos Exp $");
+__RCSID("$NetBSD: regcomp.c,v 1.49 2025/01/01 18:19:50 christos Exp $");
 
 #ifndef LIBHACK
 #define REGEX_GNU_EXTENSIONS
@@ -1764,8 +1764,7 @@ CHadd(struct parse *p, cset *cs, wint_t 
 	_DIAGASSERT(p != NULL);
 	_DIAGASSERT(cs != NULL);
 
-	assert(ch >= 0);
-	if (ch < NC)
+	if ((unsigned)ch < NC)
 		cs->bmp[(unsigned)ch >> 3] |= 1 << (ch & 7);
 	else {
 		newwides = reallocarray(cs->wides, cs->nwides + 1,
@@ -1778,9 +1777,9 @@ CHadd(struct parse *p, cset *cs, wint_t 
 		cs->wides[cs->nwides++] = ch;
 	}
 	if (cs->icase) {
-		if ((nch = towlower(ch)) < NC)
+		if ((unsigned)(nch = towlower(ch)) < NC)
 			cs->bmp[(unsigned)nch >> 3] |= 1 << (nch & 7);
-		if ((nch = towupper(ch)) < NC)
+		if ((unsigned)(nch = towupper(ch)) < NC)
 			cs->bmp[(unsigned)nch >> 3] |= 1 << (nch & 7);
 	}
 }

Index: src/lib/libc/regex/regex2.h
diff -u src/lib/libc/regex/regex2.h:1.15 src/lib/libc/regex/regex2.h:1.16
--- src/lib/libc/regex/regex2.h:1.15	Wed Feb 24 13:13:21 2021
+++ src/lib/libc/regex/regex2.h	Wed Jan  1 13:19:50 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: regex2.h,v 1.15 2021/02/24 18:13:21 christos Exp $	*/
+/*	$NetBSD: regex2.h,v 1.16 2025/01/01 18:19:50 christos Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-3-Clause
@@ -135,8 +135,7 @@ CHIN1(cset *cs, wint_t ch)
 {
 	unsigned int i;
 
-	assert(ch >= 0);
-	if (ch < NC)
+	if ((unsigned)ch < NC)
 		return (((cs->bmp[(unsigned)ch >> 3] & (1 << (ch & 7))) != 0) ^
 		    cs->invert);
 	for (i = 0; i < cs->nwides; i++) {
@@ -160,8 +159,7 @@ static __inline int
 CHIN(cset *cs, wint_t ch)
 {
 
-	assert(ch >= 0);
-	if (ch < NC)
+	if ((unsigned)ch < NC)
 		return (((cs->bmp[(unsigned)ch >> 3] & (1 << (ch & 7))) != 0) ^
 		    cs->invert);
 	else if (cs->icase)

Reply via email to