summaryrefslogtreecommitdiffstats
path: root/scan_asn1tagint.c
diff options
context:
space:
mode:
Diffstat (limited to 'scan_asn1tagint.c')
-rw-r--r--scan_asn1tagint.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/scan_asn1tagint.c b/scan_asn1tagint.c
index 49a9974..2c23fa2 100644
--- a/scan_asn1tagint.c
+++ b/scan_asn1tagint.c
@@ -3,9 +3,10 @@
size_t scan_asn1tagint(const char* src,const char* max,unsigned long* val) {
const char* orig=src;
unsigned long l=0;
+ if (src==max || (unsigned char)src[0]==0x80) return 0; /* catch non-minimal encoding */
for (;; ++src) {
if (src>=max) return 0;
- if (l>(((unsigned long)-1)>>7)) return 0; /* catch integer overflow */
+ if (l>>(sizeof(l)*8-7)) return 0; /* catch integer overflow */
l=l*128+(*src&0x7F);
if (!(*src&0x80)) break;
}