URI: 
       fix undefined behaviour of using isspace ctype function - sic - simple irc client
  HTML git clone git://git.suckless.org/sic
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit d9bda20849c464eff0adb56414da1840abc6ef6a
   DIR parent df4c0611366bf361fa263fbc57009cbe68456855
  HTML Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       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(-)
       ---
   DIR 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':
   DIR 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';
        }