summaryrefslogtreecommitdiff
path: root/lib/x509
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2012-01-21 09:52:09 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2012-01-21 09:52:09 +0100
commit558bd61dd76c064be9aff0be8ef5c7240bd81747 (patch)
tree3d5879e9e954b81e5e77c971b57f91cd367759d3 /lib/x509
parentb399c12ca778ce35764c794918eca4c7bbed6ed2 (diff)
downloadgnutls-558bd61dd76c064be9aff0be8ef5c7240bd81747.tar.gz
Corrected bug in _gnutls_parse_aia()
Diffstat (limited to 'lib/x509')
-rw-r--r--lib/x509/x509.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/lib/x509/x509.c b/lib/x509/x509.c
index 5fd2476cc0..c8514f35bd 100644
--- a/lib/x509/x509.c
+++ b/lib/x509/x509.c
@@ -3344,19 +3344,21 @@ _gnutls_parse_aia (ASN1_TYPE src,
if (oid == NULL)
oid = GNUTLS_OID_AD_OCSP;
{
- char *tmpoid[20];
+ char tmpoid[20];
snprintf (nptr, sizeof (nptr), "?%u.accessMethod", seq);
len = sizeof (tmpoid);
result = asn1_read_value (src, nptr, tmpoid, &len);
+
if (result == ASN1_VALUE_NOT_FOUND || result == ASN1_ELEMENT_NOT_FOUND)
- return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE;
+ return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
+
if (result != ASN1_SUCCESS)
{
gnutls_assert ();
return _gnutls_asn2err (result);
}
if ((unsigned)len != strlen (oid) + 1 || memcmp (tmpoid, oid, len) != 0)
- return GNUTLS_E_UNKNOWN_ALGORITHM;
+ return gnutls_assert_val(GNUTLS_E_UNKNOWN_ALGORITHM);
}
/* fall through */
@@ -3366,26 +3368,26 @@ _gnutls_parse_aia (ASN1_TYPE src,
break;
default:
- gnutls_assert ();
- return GNUTLS_E_INVALID_REQUEST;
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
}
len = 0;
result = asn1_read_value (src, nptr, NULL, &len);
if (result == ASN1_VALUE_NOT_FOUND || result == ASN1_ELEMENT_NOT_FOUND)
- return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE;
+ return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE);
+
if (result != ASN1_MEM_ERROR)
{
gnutls_assert ();
return _gnutls_asn2err (result);
}
+
d.size = len;
+
d.data = gnutls_malloc (d.size);
if (d.data == NULL)
- {
- gnutls_assert ();
- return GNUTLS_E_MEMORY_ERROR;
- }
+ return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR);
+
result = asn1_read_value (src, nptr, d.data, &len);
if (result != ASN1_SUCCESS)
{
@@ -3402,7 +3404,7 @@ _gnutls_parse_aia (ASN1_TYPE src,
else
gnutls_free (d.data);
- return GNUTLS_E_SUCCESS;
+ return 0;
}
/**
@@ -3524,6 +3526,7 @@ gnutls_x509_crt_get_authority_info_access (gnutls_x509_crt_t crt,
}
ret = _gnutls_parse_aia (c2, seq, what, data);
+
asn1_delete_structure (&c2);
if (ret < 0)
gnutls_assert ();