From c12ad2d4e8e8d1371eff72e5a6b25357c2ea2fdb Mon Sep 17 00:00:00 2001 From: Josie Huddleston Date: Tue, 13 Jul 2021 13:23:26 +0100 Subject: [PATCH] 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 --- lib/easy.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 */ } -- 2.47.2