int ret = __b64_decode(cert_b64, strlen(cert_b64), &cert_raw, &cert_raw_len);
if (ret != 0) {
_ERR("__b64_decode failed");
- free(cert_raw);
+ SAFE_DELETE(cert_raw);
return NULL;
}
+ unsigned char *cert_raw_orig = cert_raw;
+
X509 *x509 = d2i_X509(NULL, (const unsigned char **)(&cert_raw), cert_raw_len);
if (x509 == NULL) {
_ERR("d2i_X509 failed");
- free(cert_raw);
+ SAFE_DELETE(cert_raw_orig);
return NULL;
}
int der_len = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x509), NULL);
if (der_len <= 0) {
_ERR("i2d_X509_PUBKEY failed");
- free(cert_raw);
+ SAFE_DELETE(cert_raw_orig);
return NULL;
}
if (ret != 1) {
_ERR("EVP_Digest failed");
OPENSSL_free(der_pubkey);
- free(cert_raw);
+ SAFE_DELETE(cert_raw_orig);
return NULL;
}
char *pub_key = __b64_encode(pubkey_der_digest, (int)hashed_len);
OPENSSL_free(der_pubkey);
- free(cert_raw);
+ SAFE_DELETE(cert_raw_orig);
if (pub_key != NULL)
_INFO("%s", pub_key);