DecodeBase64: wrapper needs to 0-terminate buffer.
[citadel.git] / libcitadel / lib / tools.c
index d5396191ac293650301d2c3b465a061a54daf077..bc0cb767b3cbaa613723452761453117f0cf84f2 100644 (file)
@@ -324,13 +324,14 @@ size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int li
                        dest[destoffset++] = '\r';
                        dest[destoffset++] = '\n';
                }
-               return destoffset;
-
-       } else {
+       }
+       else {
                destoffset = base64_encode_block(source, sourcelen, dest, &_state);
 
-               return destoffset + base64_encode_blockend(&(dest[destoffset]), &_state);
+               destoffset += base64_encode_blockend(&(dest[destoffset]), &_state);
        }
+       dest[destoffset] = 0;
+       return destoffset;
 }
 
 
@@ -341,10 +342,13 @@ size_t CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int li
 int CtdlDecodeBase64(char *dest, const char *source, size_t length)
 {
        base64_decodestate _state;
+       int len;
 
        base64_init_decodestate(&_state);
 
-       return base64_decode_block(source, length, dest, &_state);
+       len = base64_decode_block(source, length, dest, &_state);
+       dest[len] = '\0';
+       return len;
 }