]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
multi-ssl: reset the SSL backend on `Curl_global_cleanup()`
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 17 Apr 2020 21:04:14 +0000 (23:04 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 20 Apr 2020 07:15:47 +0000 (09:15 +0200)
When cURL is compiled with support for multiple SSL backends, it is
possible to configure an SSL backend via `curl_global_sslset()`, but
only *before* `curl_global_init()` was called.

If another SSL backend should be used after that, a user might be
tempted to call `curl_global_cleanup()` to start over. However, we did
not foresee that use case and forgot to reset the SSL backend in that
cleanup.

Let's allow that use case.

Fixes #5255
Closes #5257
Reported-by: davidedec on github
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
lib/vtls/vtls.c

index badd93d080522442fd8513301f7dad3a3e7b1dc3..f1b52522736120880483e7994209da72cbda9365 100644 (file)
@@ -174,6 +174,9 @@ int Curl_ssl_init(void)
   return Curl_ssl->init();
 }
 
+#if defined(CURL_WITH_MULTI_SSL)
+static const struct Curl_ssl Curl_ssl_multi;
+#endif
 
 /* Global cleanup */
 void Curl_ssl_cleanup(void)
@@ -181,6 +184,9 @@ void Curl_ssl_cleanup(void)
   if(init_ssl) {
     /* only cleanup if we did a previous init */
     Curl_ssl->cleanup();
+#if defined(CURL_WITH_MULTI_SSL)
+    Curl_ssl = &Curl_ssl_multi;
+#endif
     init_ssl = FALSE;
   }
 }