From 0e951ef00743d94eb7a507bcd530e8f4c775dd38 Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Thu, 8 Feb 2007 20:32:17 +0000 Subject: [PATCH] #10 fix offbyone error in decode --- src/encoding.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/encoding.c b/src/encoding.c index 252ab66..39cb3d5 100644 --- a/src/encoding.c +++ b/src/encoding.c @@ -170,28 +170,31 @@ decode_data(char *dest, int size, const char *src, char *srcend) int padded; char encoded[255]; char padding[5]; + int enclen; char *pp; char *ep; memset(encoded, 0, sizeof(encoded)); memset(dest, 0, size); - // The first char is not Base32-encoded, just pass it through + /* First byte is not encoded */ *dest++ = *src++; - + len = 1; + ep = encoded; - while(src < srcend) { + enclen = 0; + while(enclen < sizeof(encoded) && src < srcend) { if(*src == '.') { src++; continue; } *ep++ = *src++; + enclen++; } - chunks = strlen(encoded) / 8; - padded = strlen(encoded) % 8; + chunks = enclen / 8; + padded = enclen % 8; - len = 0; ep = encoded; for (i = 0; i < chunks-1; i++) { decode_chunk(dest, ep);