From 708c358a745fa5e0f1bc142c3371b1a292423eb7 Mon Sep 17 00:00:00 2001 From: leitner Date: Tue, 15 Apr 2014 20:12:50 +0000 Subject: [PATCH] for asn1derlength: save a few bytes for asn1dertag: catch too-large-value overflow --- scan/scan_asn1derlength.c | 2 +- scan/scan_asn1dertag.c | 22 +++++++++++++++++++--- test/marshal.c | 1 + 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/scan/scan_asn1derlength.c b/scan/scan_asn1derlength.c index 7d2ee91..60c604a 100644 --- a/scan/scan_asn1derlength.c +++ b/scan/scan_asn1derlength.c @@ -2,7 +2,7 @@ size_t scan_asn1derlengthvalue(const char* src,size_t len,unsigned long long* value) { if (len==0 || len>=-(uintptr_t)src) return 0; - unsigned char i,c=*src; + unsigned int i,c=*src; unsigned long long l; if ((c&0x80)==0) { *value=c&0x7f; diff --git a/scan/scan_asn1dertag.c b/scan/scan_asn1dertag.c index 17b6044..7c5e7c1 100644 --- a/scan/scan_asn1dertag.c +++ b/scan/scan_asn1dertag.c @@ -2,14 +2,30 @@ size_t scan_asn1dertag(const char* src,size_t len,unsigned long long* length) { size_t n; - unsigned long long l=0; - for (n=0; n>=1; + } + bits=sizeof(l)*8-bits; + } + for (n=1; n