From b61176f17b59a94750dff1f959231dadc4e6078a Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 21 Apr 2017 16:31:06 +0200 Subject: Update ldap/asn1/... files with current tinyldap --- scan_asn1rawint.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'scan_asn1rawint.c') diff --git a/scan_asn1rawint.c b/scan_asn1rawint.c index 6f6f676..375da1d 100644 --- a/scan_asn1rawint.c +++ b/scan_asn1rawint.c @@ -1,17 +1,21 @@ #include "asn1.h" size_t scan_asn1rawint(const char* src,const char* max,size_t len,long* l) { - size_t i,j; + size_t i; long m; - if (src>=max) return 0; - if (*src<0) m=-1; else m=0; - for (i=j=0; imax) return 0; + if (src>=max) return 0; // 0 bytes input buffer + if (*src<0) m=-1; else m=0; // negative number? + if (len>1 && *src==m) { + // we want to catch things like 00 01 + // but a leading 0 byte is needed for 00 a0 because otherwise it would be -96 + if ((src[1]>>7)==m) return 0; // non-minimal encoding + if (len>sizeof(m)+1) return 0; // value too large, does not fit + } else + if (len>sizeof(m)) return 0; // value too large, does not fit + if (src+len>max) return 0; // input buffer not sufficient + for (i=0; isizeof(long)) return 0; *l=m; return len; } -- cgit v1.2.3-55-g7522