Introduction
Introduction Statistics Contact Development Disclaimer Help
fix undefined behaviour of using isspace ctype function - sic - simple irc clie…
git clone git://git.suckless.org/sic
Log
Files
Refs
README
LICENSE
---
commit d9bda20849c464eff0adb56414da1840abc6ef6a
parent df4c0611366bf361fa263fbc57009cbe68456855
Author: Hiltjo Posthuma <[email protected]>
Date: Thu, 6 May 2021 01:09:21 +0200
fix undefined behaviour of using isspace ctype function
cast all ctype(3) functions argument to (unsigned char) to avoid UB
POSIX says:
"The c argument is an int, the value of which the application shall ensure is a
character representable as an unsigned char or equal to the value of the macro
EOF. If the argument has any other value, the behavior is undefined."
Many libc cast implicitly the value, but NetBSD for example does not, which is
probably the correct thing to interpret it.
Diffstat:
M sic.c | 2 +-
M util.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
---
diff --git a/sic.c b/sic.c
@@ -74,7 +74,7 @@ parsein(char *s) {
return;
}
c = *++s;
- if(c != '\0' && isspace(s[1])) {
+ if(c != '\0' && isspace((unsigned char)s[1])) {
p = s + 2;
switch(c) {
case 'j':
diff --git a/util.c b/util.c
@@ -42,7 +42,7 @@ dial(char *host, char *port) {
static char *
eat(char *s, int (*p)(int), int r) {
- while(*s != '\0' && p(*s) == r)
+ while(*s != '\0' && p((unsigned char)*s) == r)
s++;
return s;
}
@@ -61,7 +61,7 @@ trim(char *s) {
char *e;
e = s + strlen(s) - 1;
- while(e > s && isspace(*e))
+ while(e > s && isspace((unsigned char)*e))
e--;
*(e + 1) = '\0';
}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.