summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2012-03-13 19:33:30 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2012-03-13 19:34:32 +0100
commit826a8eb8dd5bad46d15b2dd58a54938acd36af71 (patch)
treec1ca06ac70c7765aeeb8acfb9ef208e0c6173231
parentae041943ec3d102a736ab58d379f346fea3b2179 (diff)
downloadlibtasn1-826a8eb8dd5bad46d15b2dd58a54938acd36af71.tar.gz
check for overflows
-rw-r--r--lib/decoding.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/decoding.c b/lib/decoding.c
index 00ae287..32888a3 100644
--- a/lib/decoding.c
+++ b/lib/decoding.c
@@ -115,15 +115,17 @@ asn1_get_length_der (const unsigned char *der, int der_len, int *len)
static int
asn1_get_length_der_checked (const unsigned char *der, int der_len, int *len)
{
-int ret;
+int ret, tot;
ret = asn1_get_length_der(der, der_len, len);
if (ret < 0)
return ret;
-
- if (ret + *len > der_len)
- return -3;
+ tot = ret + *len;
+
+ if (tot < 0 || tot > der_len)
+ return -3;
+
return ret;
}