I have a mostly-identical patch in my tree, though I tried to improve
readability a bit.
- todd
Index: usr.sbin/smtpd/mta_session.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/mta_session.c,v
retrieving revision 1.132
diff -u -p -u -r1.132 mta_session.c
--- usr.sbin/smtpd/mta_session.c 24 Feb 2020 16:16:07 -0000 1.132
+++ usr.sbin/smtpd/mta_session.c 24 Feb 2020 18:19:22 -0000
@@ -1295,13 +1295,12 @@ mta_io(struct io *io, int evt, void *arg
if (s->replybuf[0] == '\0')
(void)strlcat(s->replybuf, line, sizeof
s->replybuf);
else if (len > 4) {
- line = line + 4;
- if (isdigit((int)*line) && *(line + 1) == '.' &&
- isdigit((int)*line+2) && *(line + 3) == '.'
&&
- isdigit((int)*line+4) &&
isspace((int)*(line + 5)))
- (void)strlcat(s->replybuf, line+5,
sizeof s->replybuf);
- else
- (void)strlcat(s->replybuf, line, sizeof
s->replybuf);
+ p = line + 4;
+ if (isdigit((unsigned char)p[0]) && p[1] == '.'
&&
+ isdigit((unsigned char)p[2]) && p[3] == '.'
&&
+ isdigit((unsigned char)p[4]) &&
isspace((unsigned char)p[5]))
+ p += 5;
+ (void)strlcat(s->replybuf, p, sizeof
s->replybuf);
}
goto nextline;
}
@@ -1313,9 +1312,9 @@ mta_io(struct io *io, int evt, void *arg
(void)strlcat(s->replybuf, line, sizeof s->replybuf);
else if (len > 4) {
p = line + 4;
- if (isdigit((int)*p) && *(p + 1) == '.' &&
- isdigit((int)*p+2) && *(p + 3) == '.' &&
- isdigit((int)*p+4) && isspace((int)*(p + 5)))
+ if (isdigit((unsigned char)p[0]) && p[1] == '.' &&
+ isdigit((unsigned char)p[2]) && p[3] == '.' &&
+ isdigit((unsigned char)p[4]) && isspace((unsigned
char)p[5]))
p += 5;
if (strlcat(s->replybuf, p, sizeof s->replybuf) >=
sizeof s->replybuf)
(void)strlcpy(s->replybuf, line, sizeof
s->replybuf);
Index: usr.sbin/smtpd/parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/parse.y,v
retrieving revision 1.276
diff -u -p -u -r1.276 parse.y
--- usr.sbin/smtpd/parse.y 3 Feb 2020 15:41:22 -0000 1.276
+++ usr.sbin/smtpd/parse.y 24 Feb 2020 18:19:51 -0000
@@ -529,7 +529,7 @@ SMTP LIMIT limits_smtp
free($3);
YYERROR;
}
- if (isspace((int)*$3) || !isprint((int)*$3) || *$3== '@') {
+ if (isspace((unsigned char)*$3) || !isprint((unsigned char)*$3) || *$3
== '@') {
yyerror("sub-addr-delim uses invalid character");
free($3);
YYERROR;
Index: usr.sbin/smtpd/smtp_client.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/smtp_client.c,v
retrieving revision 1.12
diff -u -p -u -r1.12 smtp_client.c
--- usr.sbin/smtpd/smtp_client.c 10 Sep 2019 12:08:26 -0000 1.12
+++ usr.sbin/smtpd/smtp_client.c 24 Feb 2020 18:21:43 -0000
@@ -779,9 +779,10 @@ smtp_client_replycat(struct smtp_client
line += 3;
if (line[0]) {
line += 1;
- if (isdigit((int)line[0]) && line[1] == '.' &&
- isdigit((int)line[2]) && line[3] == '.' &&
- isdigit((int)line[4]) && isspace((int)line[5]))
+ if (isdigit((unsigned char)line[0]) && line[1] == '.' &&
+ isdigit((unsigned char)line[2]) && line[3] == '.' &&
+ isdigit((unsigned char)line[4]) &&
+ isspace((unsigned char)line[5]))
line += 5;
}
} else
Index: usr.sbin/smtpd/util.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/util.c,v
retrieving revision 1.150
diff -u -p -u -r1.150 util.c
--- usr.sbin/smtpd/util.c 3 Oct 2019 04:49:12 -0000 1.150
+++ usr.sbin/smtpd/util.c 24 Feb 2020 19:17:12 -0000
@@ -462,7 +462,7 @@ valid_domainpart(const char *s)
if (strlcpy(domain, p, sizeof domain) >= sizeof domain)
return 0;
- c = strchr(domain, (int)']');
+ c = strchr(domain, ']');
if (!c || c[1] != '\0')
return 0;
@@ -489,7 +489,7 @@ valid_domainpart(const char *s)
return res_hnok(s);
}
-#define LABELCHR(c) ((c) == '-' || (c) == '_' || isalpha((int)(c)) ||
isdigit((int)(c)))
+#define LABELCHR(c) ((c) == '-' || (c) == '_' || isalpha((unsigned char)(c))
|| isdigit((unsigned char)(c)))
#define LABELMAX 63
#define DNAMEMAX 253