]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
schannel: fix memory leak
authorJoshua Rogers <MegaManSec@users.noreply.github.com>
Sat, 18 Oct 2025 16:25:45 +0000 (00:25 +0800)
committerJay Satiro <raysatiro@yahoo.com>
Sun, 19 Oct 2025 06:23:36 +0000 (02:23 -0400)
- Do not leak memory on failed setting algorithm cipher list.

Discovered by ZeroPath.

- Do not free backend->cred after failed AcquireCredentialsHandle.

backend->cred is always freed later, during cleanup.

Closes https://github.com/curl/curl/pull/19118

lib/vtls/schannel.c

index ae5834d84342b333e4737f5e08edf5f39c1aa29c..9b2b1e702e81ffba2d7d21396ad4ed613f7d3425 100644 (file)
@@ -818,6 +818,8 @@ schannel_acquire_credential_handle(struct Curl_cfilter *cf,
       result = set_ssl_ciphers(&schannel_cred, ciphers, algIds);
       if(result) {
         failf(data, "schannel: Failed setting algorithm cipher list");
+        if(client_certs[0])
+          CertFreeCertificateContext(client_certs[0]);
         return result;
       }
     }
@@ -845,7 +847,6 @@ schannel_acquire_credential_handle(struct Curl_cfilter *cf,
     char buffer[STRERROR_LEN];
     failf(data, "schannel: AcquireCredentialsHandle failed: %s",
           Curl_sspi_strerror(sspi_status, buffer, sizeof(buffer)));
-    Curl_safefree(backend->cred);
     switch(sspi_status) {
     case SEC_E_INSUFFICIENT_MEMORY:
       return CURLE_OUT_OF_MEMORY;