]> granicus.if.org Git - apache/commitdiff
Fix Bug#: 25659 (Memory leak in ssl_util_algotypeof())
authorMartin Kraemer <martin@apache.org>
Tue, 20 Sep 2005 14:42:31 +0000 (14:42 +0000)
committerMartin Kraemer <martin@apache.org>
Tue, 20 Sep 2005 14:42:31 +0000 (14:42 +0000)
Reported by David Blake in 2003, including patch.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@290459 13f79535-47bb-0310-9956-ffa450edef68

modules/ssl/ssl_util.c

index bd6c2c8e81e063c93a7ab1e611437871d50e70a8..edfcb09643d2bd50920ef509e1d6d0071977dd02 100644 (file)
@@ -137,10 +137,11 @@ BOOL ssl_util_path_check(ssl_pathcheck_t pcm, const char *path, apr_pool_t *p)
 ssl_algo_t ssl_util_algotypeof(X509 *pCert, EVP_PKEY *pKey) 
 {
     ssl_algo_t t;
+    EVP_PKEY *pFreeKey = NULL;
             
     t = SSL_ALGO_UNKNOWN;
     if (pCert != NULL)
-        pKey = X509_get_pubkey(pCert);
+        pFreeKey = pKey = X509_get_pubkey(pCert);
     if (pKey != NULL) {
         switch (EVP_PKEY_key_type(pKey)) {
             case EVP_PKEY_RSA: 
@@ -153,6 +154,11 @@ ssl_algo_t ssl_util_algotypeof(X509 *pCert, EVP_PKEY *pKey)
                 break;
         }
     }
+#ifdef OPENSSL_VERSION_NUMBER
+    /* Only refcounted in OpenSSL */
+    if (pFreeKey != NULL)
+        EVP_PKEY_free(pFreeKey);
+#endif
     return t;
 }