diff --git a/lib/asn1/der_format.c b/lib/asn1/der_format.c index 73d588dd0..c12a321cc 100644 --- a/lib/asn1/der_format.c +++ b/lib/asn1/der_format.c @@ -51,17 +51,26 @@ der_parse_hex_heim_integer (const char *p, heim_integer *data) } len = strlen(p); - if (len < 0) + if (len < 0) { + data->data = NULL; + data->length = 0; return EINVAL; + } - data->length = len / 2; + data->length = (len / 2) + 1; data->data = malloc(data->length); - if (data->data == NULL) + if (data->data == NULL) { + data->length = 0; return ENOMEM; + } len = hex_decode(p, data->data, data->length); - if (len < 0) + if (len < 0) { + free(data->data); + data->data = NULL; + data->length = 0; return EINVAL; + } { unsigned char *p = data->data;