From: Josie Huddleston Date: Tue, 13 Jul 2021 12:23:26 +0000 (+0100) Subject: easy: during upkeep, attach Curl_easy to connections in the cache X-Git-Tag: curl-7_78_0~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c12ad2d4e8e8d1371eff72e5a6b25357c2ea2fdb;p=thirdparty%2Fcurl.git easy: during upkeep, attach Curl_easy to connections in the cache During the protocol-specific parts of connection upkeep, some code assumes that the data->conn pointer already is set correctly. However, there's currently no guarantee of that in the code. This fix temporarily attaches each connection to the Curl_easy object before performing the protocol-specific connection check on it, in a similar manner to the connection checking in extract_if_dead(). Fixes #7386 Closes #7387 Reported-by: Josie Huddleston --- diff --git a/lib/easy.c b/lib/easy.c index f682c28a72..588b1fb47e 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -1213,9 +1213,16 @@ static int conn_upkeep(struct Curl_easy *data, /* Param is unused. */ (void)param; - if(conn->handler->connection_check) + if(conn->handler->connection_check) { + /* briefly attach the connection to this transfer for the purpose of + checking it */ + Curl_attach_connnection(data, conn); + /* Do a protocol-specific keepalive check on the connection. */ conn->handler->connection_check(data, conn, CONNCHECK_KEEPALIVE); + /* detach the connection again */ + Curl_detach_connnection(data); + } return 0; /* continue iteration */ }