From 8018ea69c26fff3ea8875214a2c64b71c031d06e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Mon, 16 Jan 2006 23:01:11 +0000 Subject: [PATCH] (der_parse_hex_heim_integer): make more resiliant to errors, handle odd length numbers. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16571 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/asn1/der_format.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) 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;