Avoid a segfault (detected by Fabio Ferrari
authorEric Andersen <andersen@codepoet.org>
Sat, 7 Jul 2001 04:27:35 +0000 (04:27 -0000)
committerEric Andersen <andersen@codepoet.org>
Sat, 7 Jul 2001 04:27:35 +0000 (04:27 -0000)
<fabio.ferrari@digitro.com.br> in the wget applet) when
concat_path_file() or last_char_is() were fed a NULL.
 -Erik

libbb/concat_path_file.c
libbb/last_char_is.c

index 61efa9c3e16ac7ab13fdbe3f8ec0125c727425e1..c699a84f7e57376321eb5374560d3d64401271cd 100644 (file)
@@ -13,11 +13,14 @@ extern char *concat_path_file(const char *path, const char *filename)
 {
        char *outbuf;
        char *lc;
-       
+
+       if (!path)
+           path="";
        lc = last_char_is(path, '/');
        if (filename[0] == '/')
                filename++;
        outbuf = xmalloc(strlen(path)+strlen(filename)+1+(lc==NULL));
-       sprintf(outbuf, (lc==NULL ? "%s/%s" : "%s%s"), path, filename);
+       sprintf(outbuf, "%s%s%s", path, (lc==NULL)? "/" : "", filename);
+
        return outbuf;
 }
index a95e57c3564e6bcf8cf63c16c8e7709562b57deb..4e2ee92ed9a71a2231a4bdafeaef1062e972ea98 100644 (file)
  */
 char * last_char_is(const char *s, int c)
 {
-       char *sret  = (char *)s+strlen(s)-1;
+       char *sret;
+       if (!s)
+           return NULL;
+       sret  = (char *)s+strlen(s)-1;
        if (sret>=s && *sret == c) { 
                return sret;
        } else {