gnutls_datum_t tdata;
_gnutls_buffer_pop_datum (str, &tdata, *req_size);
+ if (tdata->data == NULL)
+ {
+ *req_size = 0;
+ return;
+ }
*req_size = tdata.size;
memcpy (data, tdata.data, tdata.size);
ecc_cleanup:
ecc_point_clear(&ecc_pub);
ecc_scalar_clear(&ecc_priv);
-
+ if (ret < 0) goto cleanup;
break;
}
default:
*r_off = idx->offset;
break;
}
- cdk_free (idx);
- idx = NULL;
}
cdk_free (idx);
return *r_off != 0xFFFFFFFF ? 0 : CDK_EOF;
void
cdk_keydb_search_release (cdk_keydb_search_t st)
{
+ if (st == NULL)
+ return;
+
keydb_cache_free (st->cache);
if (st->idx)
}
check = 0;
- cdk_keydb_search_start (&st, hd, CDK_DBSEARCH_KEYID, keyid);
+ rc = cdk_keydb_search_start (&st, hd, CDK_DBSEARCH_KEYID, keyid);
+ if (rc)
+ {
+ cdk_kbnode_release (knode);
+ gnutls_assert ();
+ return rc;
+ }
+
if (unode && find_by_keyid (unode, st))
check++;
cdk_keydb_search_release (st);
cdk_kbnode_release (unode);
- cdk_keydb_search_start (&st, hd, CDK_DBSEARCH_EXACT, (char *) id);
+ rc = cdk_keydb_search_start (&st, hd, CDK_DBSEARCH_EXACT, (char *) id);
+ if (rc)
+ {
+ cdk_kbnode_release (knode);
+ gnutls_assert ();
+ return rc;
+ }
+
if (knode && find_by_pattern (knode, st))
check++;
cdk_keydb_search_release (st);
u32 keyid;
int key_status, is_selfsig = 0;
struct verify_uid *uid_list = NULL;
- char *uid_name;
+ char *uid_name = NULL;
if (!key || !r_status)
{
{
int ret;
const uint8_t *str;
- unsigned int str_size;
+ unsigned int str_size, len;
gnutls_datum_t td;
ret = asn1_decode_simple_der (etype, der, der_size, &str, &str_size);
/* Refuse to deal with strings containing NULs. */
if (etype != ASN1_ETYPE_OCTET_STRING)
{
- if (strlen ((void*)output->data) != (size_t)output->size)
+ if (output->data)
+ len = strlen ((void*)output->data);
+ else
+ len = 0;
+
+ if (len != (size_t)output->size)
{
_gnutls_free_datum(output);
ret = gnutls_assert_val(GNUTLS_E_ASN1_DER_ERROR);
for (i=0;i<pcrt_list_size;i++)
{
gnutls_pkcs11_obj_deinit(pcrt_list[i]);
- gnutls_x509_crt_deinit(xcrt_list[i]);
+ if (xcrt_list) gnutls_x509_crt_deinit(xcrt_list[i]);
}
gnutls_free(pcrt_list);
gnutls_free(xcrt_list);
}
}
- if (gnutls_x509_crl_get_this_update (crl) > now)
+ if (gnutls_x509_crl_get_this_update (crl) > now && verify)
*verify |= GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE;
- if (gnutls_x509_crl_get_next_update (crl) < now)
+ if (gnutls_x509_crl_get_next_update (crl) < now && verify)
*verify |= GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED;
cleanup:
- if (*verify) *verify |= GNUTLS_CERT_INVALID;
+ if (verify) *verify |= GNUTLS_CERT_INVALID;
_gnutls_free_datum (&crl_signed_data);
_gnutls_free_datum (&crl_signature);
}
/* null terminate it */
- ((char *) name)[*name_size] = 0;
+ if (name)
+ ((char *) name)[*name_size] = 0;
}
}
gnutls_certificate_set_pin_function(cred->xcred, aux[i].i1.pin_fn,
aux[i].i2.udata);
}
+ else ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
if (ret < 0)
{
goto fail1;
}
memcpy(cred->tofu_file, aux[i].i1.file, len+1);
+ ret = 0;
}
else
ret = GNUTLS_E_INVALID_REQUEST;
cleanup:
free(out->data);
+ out->data = NULL;
clean_certs:
if (pub)
gnutls_pubkey_deinit(pub);