summaryrefslogtreecommitdiff
path: root/net-misc/curl/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2020-06-13 10:39:22 +0100
committerV3n3RiX <venerix@redcorelinux.org>2020-06-13 10:39:22 +0100
commit9452a6e87b6c2c70513bc47a2470bf9f1168920e (patch)
tree8ac67e26b45f34d71c5aab3621813b100a0d5f00 /net-misc/curl/files
parentf516638b7fe9592837389826a6152a7e1b251c54 (diff)
gentoo resync : 13.06.2020
Diffstat (limited to 'net-misc/curl/files')
-rw-r--r--net-misc/curl/files/curl-fix-cpu-load.patch94
1 files changed, 94 insertions, 0 deletions
diff --git a/net-misc/curl/files/curl-fix-cpu-load.patch b/net-misc/curl/files/curl-fix-cpu-load.patch
new file mode 100644
index 000000000000..fb20641b5b22
--- /dev/null
+++ b/net-misc/curl/files/curl-fix-cpu-load.patch
@@ -0,0 +1,94 @@
+Fixes https://bugs.gentoo.org/727352
+
+From 2a41e236716da4c41ebc1132bd36d9273bd0321f Mon Sep 17 00:00:00 2001
+From: Daniel Stenberg <daniel@haxx.se>
+Date: Mon, 8 Jun 2020 14:05:22 +0200
+Subject: [PATCH] socks: detect connection close during handshake
+
+The SOCKS4/5 state machines weren't properly terminated when the proxy
+connection got closed, leading to a busy-loop.
+
+Reported-By: zloi-user on github
+Fixes #5532
+Closes #5542
+---
+ lib/socks.c | 32 ++++++++++++++++++++++++++++----
+ 1 file changed, 28 insertions(+), 4 deletions(-)
+
+diff --git a/lib/socks.c b/lib/socks.c
+index 4c1af7b9de7..b2215fef30c 100644
+--- a/lib/socks.c
++++ b/lib/socks.c
+@@ -382,6 +382,11 @@ CURLcode Curl_SOCKS4(const char *proxy_user,
+ curl_easy_strerror(result));
+ return CURLE_COULDNT_CONNECT;
+ }
++ else if(!result && !actualread) {
++ /* connection closed */
++ failf(data, "connection to proxy closed");
++ return CURLE_COULDNT_CONNECT;
++ }
+ else if(actualread != sx->outstanding) {
+ /* remain in reading state */
+ sx->outstanding -= actualread;
+@@ -592,6 +597,11 @@ CURLcode Curl_SOCKS5(const char *proxy_user,
+ failf(data, "Unable to receive initial SOCKS5 response.");
+ return CURLE_COULDNT_CONNECT;
+ }
++ else if(!result && !actualread) {
++ /* connection closed */
++ failf(data, "Connection to proxy closed");
++ return CURLE_COULDNT_CONNECT;
++ }
+ else if(actualread != sx->outstanding) {
+ /* remain in reading state */
+ sx->outstanding -= actualread;
+@@ -717,15 +727,19 @@ CURLcode Curl_SOCKS5(const char *proxy_user,
+ failf(data, "Unable to receive SOCKS5 sub-negotiation response.");
+ return CURLE_COULDNT_CONNECT;
+ }
+- if(actualread != sx->outstanding) {
++ else if(!result && !actualread) {
++ /* connection closed */
++ failf(data, "connection to proxy closed");
++ return CURLE_COULDNT_CONNECT;
++ }
++ else if(actualread != sx->outstanding) {
+ /* remain in state */
+ sx->outstanding -= actualread;
+ sx->outp += actualread;
+ return CURLE_OK;
+ }
+-
+ /* ignore the first (VER) byte */
+- if(socksreq[1] != 0) { /* status */
++ else if(socksreq[1] != 0) { /* status */
+ failf(data, "User was rejected by the SOCKS5 server (%d %d).",
+ socksreq[0], socksreq[1]);
+ return CURLE_COULDNT_CONNECT;
+@@ -890,6 +904,11 @@ CURLcode Curl_SOCKS5(const char *proxy_user,
+ failf(data, "Failed to receive SOCKS5 connect request ack.");
+ return CURLE_COULDNT_CONNECT;
+ }
++ else if(!result && !actualread) {
++ /* connection closed */
++ failf(data, "connection to proxy closed");
++ return CURLE_COULDNT_CONNECT;
++ }
+ else if(actualread != sx->outstanding) {
+ /* remain in state */
+ sx->outstanding -= actualread;
+@@ -967,7 +986,12 @@ CURLcode Curl_SOCKS5(const char *proxy_user,
+ failf(data, "Failed to receive SOCKS5 connect request ack.");
+ return CURLE_COULDNT_CONNECT;
+ }
+- if(actualread != sx->outstanding) {
++ else if(!result && !actualread) {
++ /* connection closed */
++ failf(data, "connection to proxy closed");
++ return CURLE_COULDNT_CONNECT;
++ }
++ else if(actualread != sx->outstanding) {
+ /* remain in state */
+ sx->outstanding -= actualread;
+ sx->outp += actualread;