diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-03-13 19:33:30 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-03-13 19:34:32 +0100 |
commit | 826a8eb8dd5bad46d15b2dd58a54938acd36af71 (patch) | |
tree | c1ca06ac70c7765aeeb8acfb9ef208e0c6173231 | |
parent | ae041943ec3d102a736ab58d379f346fea3b2179 (diff) | |
download | libtasn1-826a8eb8dd5bad46d15b2dd58a54938acd36af71.tar.gz |
check for overflows
-rw-r--r-- | lib/decoding.c | 10 |
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; } |