static void x509_pubkey_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
{
- X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval;
+ X509_PUBKEY *pubkey;
- X509_ALGOR_free(pubkey->algor);
- ASN1_BIT_STRING_free(pubkey->public_key);
- EVP_PKEY_free(pubkey->pkey);
- OPENSSL_free(pubkey->propq);
- OPENSSL_free(pubkey);
- *pval = NULL;
+ if (pval != NULL && (pubkey = (X509_PUBKEY *)*pval) != NULL) {
+ X509_ALGOR_free(pubkey->algor);
+ ASN1_BIT_STRING_free(pubkey->public_key);
+ EVP_PKEY_free(pubkey->pkey);
+ OPENSSL_free(pubkey->propq);
+ OPENSSL_free(pubkey);
+ *pval = NULL;
+ }
}
static int x509_pubkey_ex_populate(ASN1_VALUE **pval, const ASN1_ITEM *it)
{
X509_CERT_AUX *aux;
ASN1_OBJECT *objtmp;
+ int res = 0;
+
if ((objtmp = OBJ_dup(obj)) == NULL)
return 0;
if ((aux = aux_get(x)) == NULL)
if (aux->reject == NULL
&& (aux->reject = sk_ASN1_OBJECT_new_null()) == NULL)
goto err;
- return sk_ASN1_OBJECT_push(aux->reject, objtmp);
+ if (sk_ASN1_OBJECT_push(aux->reject, objtmp) > 0)
+ res = 1;
+
err:
- ASN1_OBJECT_free(objtmp);
- return 0;
+ if (!res)
+ ASN1_OBJECT_free(objtmp);
+ return res;
}
void X509_trust_clear(X509 *x)