summaryrefslogtreecommitdiff
path: root/lib/socks.c
diff options
context:
space:
mode:
authorMarc Hoersken <info@marc-hoersken.de>2016-08-14 17:07:11 +0200
committerMarc Hoersken <info@marc-hoersken.de>2016-08-14 17:07:11 +0200
commitb7ee5316c2fd5b0fa933a4fcdf2049e112ace669 (patch)
treedf186602a67410607a64b204deb042f5ca9b6f50 /lib/socks.c
parentcc3384a254bbffc64f3dd2a2d3d61fe84ec7472d (diff)
downloadcurl-b7ee5316c2fd5b0fa933a4fcdf2049e112ace669.tar.gz
socks.c: Correctly calculate position of port in response packet
Third commit to fix issue #944 regarding SOCKS5 error handling. Reported-by: David Kalnischkies
Diffstat (limited to 'lib/socks.c')
-rw-r--r--lib/socks.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/socks.c b/lib/socks.c
index bb93e424a..b6bc4e17c 100644
--- a/lib/socks.c
+++ b/lib/socks.c
@@ -719,14 +719,16 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
"Can't complete SOCKS5 connection to %d.%d.%d.%d:%d. (%d)",
(unsigned char)socksreq[4], (unsigned char)socksreq[5],
(unsigned char)socksreq[6], (unsigned char)socksreq[7],
- (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+ (((unsigned char)socksreq[8] << 8) |
+ (unsigned char)socksreq[9]),
(unsigned char)socksreq[1]);
}
else if(socksreq[3] == 3) {
failf(data,
"Can't complete SOCKS5 connection to %s:%d. (%d)",
hostname,
- (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+ (((unsigned char)socksreq[len - 2] << 8) |
+ (unsigned char)socksreq[len - 1]),
(unsigned char)socksreq[1]);
}
else if(socksreq[3] == 4) {
@@ -741,7 +743,8 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
(unsigned char)socksreq[14], (unsigned char)socksreq[15],
(unsigned char)socksreq[16], (unsigned char)socksreq[17],
(unsigned char)socksreq[18], (unsigned char)socksreq[19],
- (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+ (((unsigned char)socksreq[20] << 8) |
+ (unsigned char)socksreq[21]),
(unsigned char)socksreq[1]);
}
return CURLE_COULDNT_CONNECT;