From 8cf92eb6bec8139742c88c0472ff91223a727ae0 Mon Sep 17 00:00:00 2001 From: leitner Date: Tue, 24 Sep 2019 16:05:40 +0000 Subject: [PATCH] needed byte calculation was wrong: *7/8 instead of *8/7 --- fmt_asn1tagint.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fmt_asn1tagint.c b/fmt_asn1tagint.c index b8ac41d..f6c57b4 100644 --- a/fmt_asn1tagint.c +++ b/fmt_asn1tagint.c @@ -4,7 +4,7 @@ /* Store big endian, 7 bits at a time, set high bit in all but last byte */ /* Return number of bytes needed. Only write if dest!=NULL */ size_t fmt_asn1tagint(char* dest,unsigned long l) { - size_t needed=((sizeof l)*7)/8,i; + size_t needed=((sizeof l)*8)/7+1,i; for (i=1; i>(i*7))) break; @@ -28,5 +28,6 @@ int main() { assert(fmt_asn1tagint(buf,1)==1 && !memcmp(buf,"\x01",1)); assert(fmt_asn1tagint(buf,0x7f)==1 && !memcmp(buf,"\x7f",1)); assert(fmt_asn1tagint(buf,0x80)==2 && !memcmp(buf,"\x81\x00",2)); + assert(fmt_asn1tagint(buf,0xffffffff)==5 && !memcmp(buf,"\x8f\xff\xff\xff\x7f",5)); } #endif