diff options
Diffstat (limited to 'scan_asn1tagint.c')
-rw-r--r-- | scan_asn1tagint.c | 3 |
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; } |