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 --- fmt_asn1generic.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'fmt_asn1generic.c') diff --git a/fmt_asn1generic.c b/fmt_asn1generic.c index c97ee96..f864012 100644 --- a/fmt_asn1generic.c +++ b/fmt_asn1generic.c @@ -6,7 +6,6 @@ size_t fmt_asn1generic(char* dest,const char* fmt,...) { size_t containerstack[100]; size_t curinstack=0; va_list args; - va_start(args,fmt); unsigned long* application=0; struct string* s; struct oid* o; @@ -17,6 +16,7 @@ size_t fmt_asn1generic(char* dest,const char* fmt,...) { unsigned long desttag=0; unsigned long appstore; int stringtype; + va_start(args,fmt); while (*fmt) { char* realdest=dest?dest+cursor:NULL; switch (*fmt) { @@ -32,6 +32,20 @@ size_t fmt_asn1generic(char* dest,const char* fmt,...) { application=NULL; curlen+=fmt_asn1length(realdest?realdest+curlen:NULL,0); break; + case 'B': // send boolean + { + int i=va_arg(args,int); + if (i!=0 && i!=1) { + va_end(args); + return 0; + } + if (application) + curlen=fmt_asn1int(realdest,APPLICATION,PRIMITIVE,*application,i); + else + curlen=fmt_asn1int(realdest,UNIVERSAL,PRIMITIVE,BOOLEAN,i); + application=NULL; + break; + } case 'i': // send integer { unsigned long i=va_arg(args,unsigned long); @@ -50,7 +64,7 @@ size_t fmt_asn1generic(char* dest,const char* fmt,...) { curlen=fmt_asn1bitstring(realdest,UNIVERSAL,PRIMITIVE,BIT_STRING,s->s,s->l); application=NULL; break; - case 'B': + case 'I': stringtype=BIT_STRING; goto stringcopy; case 'A': @@ -122,7 +136,10 @@ stringcopy_alt: * sequence data backwards to make room to write the ASN.1 length */ { char* anfang; - if (!curinstack) return 0; + if (!curinstack) { + va_end(args); + return 0; + } anfang=dest+containerstack[--curinstack]; seqlen=dest+cursor-anfang; curlen=fmt_asn1length(NULL,seqlen); @@ -135,5 +152,6 @@ stringcopy_alt: cursor+=curlen; ++fmt; } + va_end(args); return cursor; } -- cgit v1.2.3-55-g7522