if strlen(s) was 0, it would then end up using s[-1] as an array index. Bad,
authorEric Andersen <andersen@codepoet.org>
Tue, 3 Apr 2001 22:50:52 +0000 (22:50 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 3 Apr 2001 22:50:52 +0000 (22:50 -0000)
bad, bad.  This was crashing the shell on powerpc boxes, though all other archs
seem to have a much more forgiving malloc implementations.  I finally found
this bug using electric-fence on a powerpc box.
 -Erik

libbb/trim.c

index 8a9b07a14ef43ea1d6f1ec71d606884711a3ae2e..be97d4924192f4758d3b2884547a12ed91e16d43 100644 (file)
 
 void trim(char *s)
 {
+       int len;
+
        /* trim trailing whitespace */
-       while (isspace(s[strlen(s)-1]))
-               s[strlen(s)-1]='\0';
+       while ( (len=strlen(s)) >= 1 && isspace(s[len-1]))
+               s[len-1]='\0';
 
        /* trim leading whitespace */
-       memmove(s, &s[strspn(s, " \n\r\t\v")], strlen(s));
-
+       memmove(s, &s[strspn(s, " \n\r\t\v")], len);
 }
 
 /* END CODE */