On 2021/09/29 21:21, Christian Weisgerber wrote:
> The oft-copied parse.y code declares some variables as "unsigned char *"
> but passes them to functions that take "char *" arguments and doesn't
> make any use of the unsigned property.
btw, those used to be char:
----------------------------
revision 1.628
date: 2013/11/25 12:52:45; author: benno; state: Exp; lines: +7 -7;
use u_char for buffers in yylex, for ctype calls
found by millert@, ok deraadt@
----------------------------
Index: parse.y
===================================================================
RCS file: /cvs/src/sbin/pfctl/parse.y,v
retrieving revision 1.627
retrieving revision 1.628
diff -u -p -r1.627 -r1.628
--- parse.y 22 Nov 2013 04:12:48 -0000 1.627
+++ parse.y 25 Nov 2013 12:52:45 -0000 1.628
@@ -1,4 +1,4 @@
-/* $OpenBSD: parse.y,v 1.627 2013/11/22 04:12:48 deraadt Exp $ */
+/* $OpenBSD: parse.y,v 1.628 2013/11/25 12:52:45 benno Exp $ */
/*
* Copyright (c) 2001 Markus Friedl. All rights reserved.
@@ -5536,9 +5536,9 @@ lookup(char *s)
#define MAXPUSHBACK 128
-char *parsebuf;
+u_char *parsebuf;
int parseindex;
-char pushback_buffer[MAXPUSHBACK];
+u_char pushback_buffer[MAXPUSHBACK];
int pushback_index = 0;
int
@@ -5630,8 +5630,8 @@ findeol(void)
int
yylex(void)
{
- char buf[8096];
- char *p, *val;
+ u_char buf[8096];
+ u_char *p, *val;
int quotec, next, c;
int token;
@@ -5654,7 +5654,7 @@ top:
return (findeol());
}
if (isalnum(c) || c == '_') {
- *p++ = (char)c;
+ *p++ = c;
continue;
}
*p = '\0';
@@ -5699,7 +5699,7 @@ top:
yyerror("string too long");
return (findeol());
}
- *p++ = (char)c;
+ *p++ = c;
}
yylval.v.string = strdup(buf);
if (yylval.v.string == NULL)