aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-07-07 04:27:35 +0000
committerEric Andersen <andersen@codepoet.org>2001-07-07 04:27:35 +0000
commit5a071bcbf2d30eacc2934128caf7a20b6fd70e15 (patch)
treea7cb84309210befe3449d6bae4b4944181c27940
parent934c8ecb8810c83fda10a2c185355de0564d839f (diff)
downloadbusybox-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.c7
-rw-r--r--libbb/last_char_is.c5
2 files changed, 9 insertions, 3 deletions
diff --git a/libbb/concat_path_file.c b/libbb/concat_path_file.c
index 61efa9c3e..c699a84f7 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 a95e57c35..4e2ee92ed 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 {