修复多处内存泄漏。
This commit is contained in:
@@ -300,12 +300,12 @@ static struct keyring_private* get_keyring_from_response(const char* data)
|
||||
STACK_OF(X509)* chain = NULL;
|
||||
if(data == NULL)
|
||||
{
|
||||
return NULL;
|
||||
goto error_out;
|
||||
}
|
||||
cJSON* data_json = cJSON_Parse(data);
|
||||
if(data_json == NULL)
|
||||
{
|
||||
return NULL;
|
||||
goto error_out;
|
||||
}
|
||||
cJSON* cert_json = NULL;
|
||||
cJSON* key_json = NULL;
|
||||
@@ -319,8 +319,7 @@ static struct keyring_private* get_keyring_from_response(const char* data)
|
||||
}
|
||||
if(cert == NULL)
|
||||
{
|
||||
err_out(cert, key, chain);
|
||||
return NULL;
|
||||
goto error_out;
|
||||
}
|
||||
if (key_json && key_json->valuestring != NULL)
|
||||
{
|
||||
@@ -328,13 +327,11 @@ static struct keyring_private* get_keyring_from_response(const char* data)
|
||||
}
|
||||
if(key == NULL)
|
||||
{
|
||||
err_out(cert, key, chain);
|
||||
return NULL;
|
||||
goto error_out;
|
||||
}
|
||||
if(chain_json == NULL)
|
||||
{
|
||||
err_out(cert, key, chain);
|
||||
return NULL;
|
||||
goto error_out;
|
||||
}
|
||||
cJSON* chain_cert_json = NULL;
|
||||
chain = sk_X509_new_null();
|
||||
@@ -347,8 +344,7 @@ static struct keyring_private* get_keyring_from_response(const char* data)
|
||||
}
|
||||
if(chain_cert == NULL)
|
||||
{
|
||||
err_out(cert, key, chain);
|
||||
return NULL;
|
||||
goto error_out;
|
||||
}
|
||||
sk_X509_push(chain, chain_cert);
|
||||
ssl_x509_refcount_inc(chain_cert);
|
||||
@@ -359,8 +355,17 @@ static struct keyring_private* get_keyring_from_response(const char* data)
|
||||
keyring_set_chain(_kyr, chain);
|
||||
X509_free(cert);
|
||||
EVP_PKEY_free(key);
|
||||
sk_X509_pop_free(chain, X509_free);
|
||||
sk_X509_pop_free(chain, X509_free);
|
||||
cJSON_free(data_json);
|
||||
return _kyr;
|
||||
|
||||
error_out:
|
||||
if(data_json!=NULL) cJSON_free(data_json);
|
||||
if(cert) X509_free(cert);
|
||||
if(key) EVP_PKEY_free(key);
|
||||
if(chain) sk_X509_pop_free(chain, X509_free);
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
static long keyring_local_cache_query_cb(void * data, const uchar * key, uint size, void * user_arg)
|
||||
@@ -600,6 +605,7 @@ char* url_escape(char* url)
|
||||
{
|
||||
_url = curl_easy_escape(curl, url, strlen(url));
|
||||
}
|
||||
curl_easy_cleanup(curl);
|
||||
return _url;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user