summaryrefslogtreecommitdiff
path: root/lib/strdup.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2008-02-06 19:01:13 +0000
committerYang Tse <yangsita@gmail.com>2008-02-06 19:01:13 +0000
commit20e9fc73e2c073c49e88b72fb5e07a0bb62b6d9d (patch)
tree977c9ed1b547f6f42cbb916815d07fbc8962329e /lib/strdup.c
parentbad6410d08e77239fd2f4f2f64d6c5d721a5c2b3 (diff)
downloadcurl-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.c8
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;