diff options
author | Eric Andersen | 2001-07-07 04:27:35 +0000 |
---|---|---|
committer | Eric Andersen | 2001-07-07 04:27:35 +0000 |
commit | 5a071bcbf2d30eacc2934128caf7a20b6fd70e15 (patch) | |
tree | a7cb84309210befe3449d6bae4b4944181c27940 | |
parent | 934c8ecb8810c83fda10a2c185355de0564d839f (diff) | |
download | busybox-5a071bcbf2d30eacc2934128caf7a20b6fd70e15.zip busybox-5a071bcbf2d30eacc2934128caf7a20b6fd70e15.tar.gz |
Avoid a segfault (detected by Fabio Ferrari
<fabio.ferrari@digitro.com.br> in the wget applet) when
concat_path_file() or last_char_is() were fed a NULL.
-Erik
-rw-r--r-- | libbb/concat_path_file.c | 7 | ||||
-rw-r--r-- | libbb/last_char_is.c | 5 |
2 files changed, 9 insertions, 3 deletions
diff --git a/libbb/concat_path_file.c b/libbb/concat_path_file.c index 61efa9c..c699a84 100644 --- a/libbb/concat_path_file.c +++ b/libbb/concat_path_file.c @@ -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; } diff --git a/libbb/last_char_is.c b/libbb/last_char_is.c index a95e57c..4e2ee92 100644 --- a/libbb/last_char_is.c +++ b/libbb/last_char_is.c @@ -28,7 +28,10 @@ */ 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 { |