diff options
author | Daniel Stenberg <daniel@haxx.se> | 2013-02-13 13:18:43 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2013-02-14 10:41:45 +0100 |
commit | 358c5c0745a4c47f910189095f3832163b4708c4 (patch) | |
tree | 7e605f952fc16496ce4a0b5583c258466948d8e2 /lib/socks.c | |
parent | d821525cee3fb43f746fdebf6dcc2dd8daa2bb7f (diff) | |
download | curl-358c5c0745a4c47f910189095f3832163b4708c4.tar.gz |
strlcat: remove function
This function was only used twice, both in places where performance
isn't crucial (socks + if2ip). Removing the use of this function removes
the need to have our private version for systems without it == reduced
amount of code.
Also, in the SOCKS case it is clearly better to fail gracefully rather
than to truncate the results.
This work was triggered by a bug report on the strcal prototype in
strequal.h.
strlcat was added in commit db70cd28 in February 2001!
Bug: http://curl.haxx.se/bug/view.cgi?id=1192
Reported by: Jeremy Huddleston
Diffstat (limited to 'lib/socks.c')
-rw-r--r-- | lib/socks.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/socks.c b/lib/socks.c index 51bb94664..b101a0de4 100644 --- a/lib/socks.c +++ b/lib/socks.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, 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 @@ -196,8 +196,15 @@ CURLcode Curl_SOCKS4(const char *proxy_name, * This is currently not supporting "Identification Protocol (RFC1413)". */ socksreq[8] = 0; /* ensure empty userid is NUL-terminated */ - if(proxy_name) - strlcat((char*)socksreq + 8, proxy_name, sizeof(socksreq) - 8); + if(proxy_name) { + size_t plen = strlen(proxy_name); + if(plen >= sizeof(socksreq) - 8) { + failf(data, "Too long SOCKS proxy name, can't use!\n"); + return CURLE_COULDNT_CONNECT; + } + /* copy the proxy name WITH trailing zero */ + memcpy(socksreq + 8, proxy_name, plen+1); + } /* * Make connection |