Skip to content

Commit 8235a3a

Browse files
committed
http: die on curl_easy_duphandle failure in get_active_slot
get_active_slot() duplicates the default curl handle via curl_easy_duphandle() to create a per-slot session handle. The return value is stored directly in slot->curl without checking for NULL. curl_easy_duphandle() can return NULL when memory allocation fails internally, and the libcurl documentation explicitly states this possibility. When this happens, slot->curl is NULL and the very next operation (curl_easy_setopt on line 1632 for CURLOPT_COOKIEFILE) passes NULL as the curl handle, which is undefined behavior in libcurl and typically crashes. Every HTTP operation in git goes through get_active_slot(), so this affects all remote-https, remote-http, and HTTP-based operations (clone, fetch, push over HTTP, bundle-uri downloads). Add a NULL check and die() with a clear message. There is no reasonable recovery from a failed handle duplication: the process is out of memory and cannot perform any HTTP operation. Pointed out by Coverity. Assisted-by: Claude Opus 4.6 Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
1 parent 94f0577 commit 8235a3a

1 file changed

Lines changed: 2 additions & 0 deletions

File tree

http.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1546,6 +1546,8 @@ struct active_request_slot *get_active_slot(void)
15461546

15471547
if (!slot->curl) {
15481548
slot->curl = curl_easy_duphandle(curl_default);
1549+
if (!slot->curl)
1550+
die("curl_easy_duphandle failed");
15491551
curl_session_count++;
15501552
}
15511553

0 commit comments

Comments
 (0)