From 0e8e8c87a82b7782676fcd8e1c784304622e0ae5 Mon Sep 17 00:00:00 2001 From: leitner Date: Thu, 6 Jan 2022 00:22:24 +0000 Subject: [PATCH] 100% unit test coverage --- scan_asn1int.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/scan_asn1int.c b/scan_asn1int.c index 0a01737..5f051b7 100644 --- a/scan_asn1int.c +++ b/scan_asn1int.c @@ -2,9 +2,39 @@ size_t scan_asn1int(const char* src,const char* max,enum asn1_tagclass* tc,enum asn1_tagtype* tt,unsigned long* tag,signed long* l) { size_t len,tmp,tlen; - if (!(len=scan_asn1tag(src,max,tc,tt,tag))) return 0; - if (!(tmp=scan_asn1length(src+len,max,&tlen))) return 0; + if (!(len=scan_asn1tag(src,max,tc,tt,tag))) + return 0; + if (!(tmp=scan_asn1length(src+len,max,&tlen))) + return 0; len+=tmp; - if (!(scan_asn1rawint(src+len,max,tlen,l))) return 0; + if (!(scan_asn1rawint(src+len,max,tlen,l))) + return 0; return len+tlen; } + +#ifdef UNITTEST +#include +#include + +#undef UNITTEST +#include "scan_asn1tag.c" +#include "scan_asn1tagint.c" +#include "scan_asn1length.c" +#include "scan_asn1rawint.c" + +int main() { + char buf[100]; + enum asn1_tagclass tc; + enum asn1_tagtype tt; + unsigned long tag; + signed long l; + strcpy(buf,"\x02\x01\x01"); + assert(scan_asn1int(buf,buf+3,&tc,&tt,&tag,&l)==3 && tc==UNIVERSAL && tt==PRIMITIVE && tag==INTEGER && l==1); + assert(scan_asn1int(buf,buf,&tc,&tt,&tag,&l)==0); // not enough input, first return 0 + assert(scan_asn1int(buf,buf+2,&tc,&tt,&tag,&l)==0); // not enough input, second return 0 + strcpy(buf,"\x02\x02\x00\x01"); + assert(scan_asn1int(buf,buf+3,&tc,&tt,&tag,&l)==0); // not enough input, second return 0 + assert(scan_asn1int(buf,buf+4,&tc,&tt,&tag,&l)==0); // non-minimally encoded raw int, third return + // we only care for 100% coverage of this file, the others have their own unit tests */ +} +#endif