diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-07-07 04:27:35 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-07-07 04:27:35 +0000 |
commit | 5a071bcbf2d30eacc2934128caf7a20b6fd70e15 (patch) | |
tree | a7cb84309210befe3449d6bae4b4944181c27940 /libbb/concat_path_file.c | |
parent | 934c8ecb8810c83fda10a2c185355de0564d839f (diff) | |
download | busybox-w32-5a071bcbf2d30eacc2934128caf7a20b6fd70e15.tar.gz busybox-w32-5a071bcbf2d30eacc2934128caf7a20b6fd70e15.tar.bz2 busybox-w32-5a071bcbf2d30eacc2934128caf7a20b6fd70e15.zip |
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
Diffstat (limited to 'libbb/concat_path_file.c')
-rw-r--r-- | libbb/concat_path_file.c | 7 |
1 files changed, 5 insertions, 2 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) | |||
13 | { | 13 | { |
14 | char *outbuf; | 14 | char *outbuf; |
15 | char *lc; | 15 | char *lc; |
16 | 16 | ||
17 | if (!path) | ||
18 | path=""; | ||
17 | lc = last_char_is(path, '/'); | 19 | lc = last_char_is(path, '/'); |
18 | if (filename[0] == '/') | 20 | if (filename[0] == '/') |
19 | filename++; | 21 | filename++; |
20 | outbuf = xmalloc(strlen(path)+strlen(filename)+1+(lc==NULL)); | 22 | outbuf = xmalloc(strlen(path)+strlen(filename)+1+(lc==NULL)); |
21 | sprintf(outbuf, (lc==NULL ? "%s/%s" : "%s%s"), path, filename); | 23 | sprintf(outbuf, "%s%s%s", path, (lc==NULL)? "/" : "", filename); |
24 | |||
22 | return outbuf; | 25 | return outbuf; |
23 | } | 26 | } |