diff options
author | Yang Tse <yangsita@gmail.com> | 2008-02-06 19:01:13 +0000 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2008-02-06 19:01:13 +0000 |
commit | 20e9fc73e2c073c49e88b72fb5e07a0bb62b6d9d (patch) | |
tree | 977c9ed1b547f6f42cbb916815d07fbc8962329e /lib/strdup.c | |
parent | bad6410d08e77239fd2f4f2f64d6c5d721a5c2b3 (diff) | |
download | curl-20e9fc73e2c073c49e88b72fb5e07a0bb62b6d9d.tar.gz |
Fix problem in strdup replacement when dealing with absolutely huge strings.
Diffstat (limited to 'lib/strdup.c')
-rw-r--r-- | lib/strdup.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/strdup.c b/lib/strdup.c index 97a4890e0..eef9e08ec 100644 --- a/lib/strdup.c +++ b/lib/strdup.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -27,13 +27,17 @@ #ifndef HAVE_STRDUP char *curlx_strdup(const char *str) { - int len; + size_t len; char *newstr; if(!str) return (char *)NULL; len = strlen(str); + + if(len >= ((size_t)-1) / sizeof(char)) + return (char *)NULL; + newstr = (char *) malloc((len+1)*sizeof(char)); if(!newstr) return (char *)NULL; |