summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2001-10-07 12:47:53 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2001-10-07 12:47:53 +0000
commite9ca8a4f75ff227abe251e7782607d8a7129f6cb (patch)
tree3cde5594462f516145b590c0e4867d88511a2ab7
parent11c24e0339a37c93d388e7cfbcc1bb901abafa93 (diff)
downloadgnutls-e9ca8a4f75ff227abe251e7782607d8a7129f6cb.tar.gz
fixes in the certificate extensions handling code.
Bugs reported by Neil Spring <nspring@saavie.org>
-rwxr-xr-xlib/x509_asn1.c6
-rw-r--r--lib/x509_extensions.c11
2 files changed, 12 insertions, 5 deletions
diff --git a/lib/x509_asn1.c b/lib/x509_asn1.c
index ae3295131b..3bea2f5564 100755
--- a/lib/x509_asn1.c
+++ b/lib/x509_asn1.c
@@ -187,8 +187,10 @@ _asn1_remove_node(node_asn *node)
if(node==NULL) return;
- gnutls_free(node->name);
- gnutls_free(node->value);
+ if (node->name!=NULL)
+ gnutls_free(node->name);
+ if (node->value!=NULL)
+ gnutls_free(node->value);
gnutls_free(node);
}
diff --git a/lib/x509_extensions.c b/lib/x509_extensions.c
index 16a34bd32d..d4978c3230 100644
--- a/lib/x509_extensions.c
+++ b/lib/x509_extensions.c
@@ -207,7 +207,7 @@ int _gnutls_get_ext_type( node_asn *rasn, char *root, gnutls_cert *cert)
char str[1024];
char critical[10];
char extnID[128];
- char extnValue[128];
+ char extnValue[512];
k = 0;
do {
@@ -261,12 +261,17 @@ int _gnutls_get_ext_type( node_asn *rasn, char *root, gnutls_cert *cert)
result = asn1_read_value( rasn, name2, extnValue, &len);
if (result==ASN_ELEMENT_NOT_FOUND) break;
- else
+ else {
+ if (result==ASN_MEM_ERROR && strcmp(critical, "TRUE")==0) {
+ _gnutls_log("Cannot parse extension: %s. Too small buffer.", extnID);
+ continue;
+ }
if (result != ASN_OK) {
gnutls_assert();
return GNUTLS_E_ASN1_PARSING_ERROR;
}
-
+ }
+
/* Handle Extension */
if ( (result=_parse_extension( cert, extnID, critical, extnValue, len)) < 0) {
gnutls_assert();