From 353b5cbd0054738ced8b96391b0a32715f147803 Mon Sep 17 00:00:00 2001 From: leitner Date: Thu, 7 Sep 2023 16:18:48 +0000 Subject: [PATCH] adjust boolean code test suite --- asn1.h | 2 +- scan_asn1BOOLEAN.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/asn1.h b/asn1.h index fe4fc12..a2da766 100644 --- a/asn1.h +++ b/asn1.h @@ -143,7 +143,7 @@ size_t scan_asn1string(const char* src,const char* max, /* the following expect a specific universal type and return a parse * error if the tag does not match that type */ -size_t scan_asn1BOOLEAN(const char* src,const char* max,unsigned long* l); +size_t scan_asn1BOOLEAN(const char* src,const char* max,int* l); size_t scan_asn1INTEGER(const char* src,const char* max,signed long* l); size_t scan_asn1ENUMERATED(const char* src,const char* max,unsigned long* l); size_t scan_asn1STRING(const char* src,const char* max,const char** s,size_t* l); diff --git a/scan_asn1BOOLEAN.c b/scan_asn1BOOLEAN.c index a659103..98eab1e 100644 --- a/scan_asn1BOOLEAN.c +++ b/scan_asn1BOOLEAN.c @@ -1,6 +1,6 @@ #include "asn1.h" -size_t scan_asn1BOOLEAN(const char* src,const char* max,unsigned long* val) { +size_t scan_asn1BOOLEAN(const char* src,const char* max,int* val) { size_t tmp; unsigned long tag; enum asn1_tagclass tc; @@ -8,8 +8,8 @@ size_t scan_asn1BOOLEAN(const char* src,const char* max,unsigned long* val) { long ltmp; if ((tmp=scan_asn1int(src,max,&tc,&tt,&tag,<mp))) if (tc==UNIVERSAL && tt==PRIMITIVE && tag==BOOLEAN) { - if (ltmp!=0 && ltmp!=255) return 0; - *val=(unsigned long)ltmp; + if (ltmp!=0 && ltmp!=-1) return 0; + *val=ltmp; return tmp; } return 0; @@ -28,12 +28,12 @@ size_t scan_asn1BOOLEAN(const char* src,const char* max,unsigned long* val) { int main() { char buf[100]; - unsigned long l; + int l; strcpy(buf,"\x01\x01\x00"); // 0x01 = UNIVERSAL + CONSTRUCTED + BOOLEAN, 0x01 = length 1, 0x00 = false assert(scan_asn1BOOLEAN(buf,buf+3,&l)==3 && l==0); assert(scan_asn1BOOLEAN(buf,buf+2,&l)==0); // not enough input - buf[2]=1; - assert(scan_asn1BOOLEAN(buf,buf+3,&l)==3 && l==1); + buf[2]=0xff; + assert(scan_asn1BOOLEAN(buf,buf+3,&l)==3 && l==-1); buf[2]=2; assert(scan_asn1BOOLEAN(buf,buf+3,&l)==0); // only 0 and 1 are valid values for BOOLEAN buf[0]=0x30; buf[2]=1;