hx509: Fix coverity warnings

This commit is contained in:
Nicolas Williams
2022-01-17 17:36:48 -06:00
parent 2e729a9aa2
commit dd71303a2f
7 changed files with 39 additions and 19 deletions

View File

@@ -2565,9 +2565,9 @@ get_cf(hx509_context context,
}
*out = heim_config_get_list(context->hcontext, cf, label, svc, NULL);
if (*out)
if (*out) {
ret = 0;
if (ret) {
} else {
heim_log_msg(context->hcontext, logf, 3, NULL,
"No configuration for %s %s certificate's realm "
"-> %s -> kx509 -> %s%s%s", def, label, realm, label,

View File

@@ -893,9 +893,12 @@ HX509_LIB_FUNCTION void HX509_LIB_CALL
hx509_free_octet_string_list(hx509_octet_string_list *list)
{
size_t i;
for (i = 0; i < list->len; i++)
der_free_octet_string(&list->val[i]);
free(list->val);
if (list->val) {
for (i = 0; i < list->len; i++)
der_free_octet_string(&list->val[i]);
free(list->val);
}
list->val = NULL;
list->len = 0;
}
@@ -2809,6 +2812,12 @@ _hx509_set_cert_attribute(hx509_context context,
{
hx509_cert_attribute a;
void *d;
int ret;
/*
* TODO: Rewrite this (and hx509_cert_attribute, and _hx509_cert_attrs) to
* use the add_AttributeValues() util generated by asn1_compile.
*/
if (hx509_cert_get_attribute(cert, oid) != NULL)
return 0;
@@ -2825,13 +2834,18 @@ _hx509_set_cert_attribute(hx509_context context,
if (a == NULL)
return ENOMEM;
der_copy_octet_string(attr, &a->data);
der_copy_oid(oid, &a->oid);
ret = der_copy_octet_string(attr, &a->data);
if (ret == 0)
ret = der_copy_oid(oid, &a->oid);
if (ret == 0) {
cert->attrs.val[cert->attrs.len] = a;
cert->attrs.len++;
} else {
der_free_octet_string(&a->data);
free(a);
}
cert->attrs.val[cert->attrs.len] = a;
cert->attrs.len++;
return 0;
return ret;
}
/**

View File

@@ -1566,7 +1566,9 @@ hx509_cms_create_signed(hx509_context context,
sigctx.sd.version = cMSVersion_v3;
der_copy_oid(eContentType, &sigctx.sd.encapContentInfo.eContentType);
ret = der_copy_oid(eContentType, &sigctx.sd.encapContentInfo.eContentType);
if (ret)
goto out;
/**
* Use HX509_CMS_SIGNATURE_DETACHED to create detached signatures.

View File

@@ -191,8 +191,9 @@ match_localkeyid(hx509_context context,
q.local_key_id = &value->localKeyId;
ret = hx509_certs_find(context, certs, &q, &cert);
if (ret == 0 && cert == NULL)
ret = HX509_CERT_NOT_FOUND;
if (ret == 0) {
if (value->private_key)
_hx509_cert_assign_key(cert, value->private_key);
hx509_cert_free(cert);

View File

@@ -350,12 +350,8 @@ _hx509_erase_file(hx509_context context, const char *fn)
fd = open(fn, O_RDWR | O_BINARY | O_CLOEXEC | O_NOFOLLOW);
if (fd < 0)
return errno;
return errno == ENOENT ? 0 : errno;
rk_cloexec(fd);
if (ret == -1 && errno == ENOENT)
return 0;
if (ret == -1)
return errno;
if (unlink(fn) < 0) {
ret = errno;

View File

@@ -2785,9 +2785,12 @@ acert1_kus(struct acert_options *opt,
size_t unwanted = 0;
size_t wanted = opt->has_ku_strings.num_strings;
size_t i, k, sz;
int ret;
memset(&ku, 0, sizeof(ku));
decode_KeyUsage(e->extnValue.data, e->extnValue.length, &ku, &sz);
ret = decode_KeyUsage(e->extnValue.data, e->extnValue.length, &ku, &sz);
if (ret)
return ret;
ku_num = KeyUsage2int(ku);
/* Validate requested key usage values */

View File

@@ -202,6 +202,8 @@ verify_ocsp(hx509_context context,
ret = hx509_certs_find(context, certs, &q, &signer);
if (ret && ocsp->certs)
ret = hx509_certs_find(context, ocsp->certs, &q, &signer);
if (ret == 0 && signer == NULL)
ret = HX509_CERT_NOT_FOUND;
if (ret)
goto out;
@@ -500,6 +502,8 @@ verify_crl(hx509_context context,
q.subject_name = &crl->tbsCertList.issuer;
ret = hx509_certs_find(context, certs, &q, &signer);
if (ret == 0 && signer == NULL)
ret = HX509_CERT_NOT_FOUND;
if (ret) {
hx509_set_error_string(context, HX509_ERROR_APPEND, ret,
"Failed to find certificate for CRL");