Fix swap of parameters when decoding base64; this could have lead to eventually to...
[citadel.git] / libcitadel / lib / stringbuf.c
index 813def36a0c553c0cea04e2e5c9133d4ee273225..0340ce4d44fb51e6edd50578e5d31c3a90eef890 100644 (file)
@@ -2006,32 +2006,13 @@ void StrBufXMLEscAppend(StrBuf *OutBuf,
                        *pt = *pch;
                        pt++; pch++;
                }
-               else if (*pch < 0x20) {
-                       /* we probably shouldn't be doing this */
-                       if (OverrideLowChars)
-                       {
-                               *pt = '_';
-                               pt ++;
-                               pch ++;
-                       }
-                       else
-                       {
-                               *pt = '&';
-                               pt++;
-                               *pt = HexList[*(unsigned char*)pch][0];
-                               pt ++;
-                               *pt = HexList[*(unsigned char*)pch][1];
-                               pt ++; pch ++;
-                               *pt = '&';
-                               pt++;
-                               pch ++;
-                       }
-               }
                else {
                        IsUtf8Sequence =  Ctdl_GetUtf8SequenceLength(pch, pche);
                        if (IsUtf8Sequence)
                        {
-                               while (IsUtf8Sequence > 0){
+                               while ((IsUtf8Sequence > 0) && 
+                                      (pch < pche))
+                               {
                                        *pt = *pch;
                                        pt ++;
                                        pch ++;
@@ -2846,7 +2827,7 @@ int StrBufDecodeBase64To(const StrBuf *BufIn, StrBuf *BufOut)
                return -1;
 
        if (BufOut->BufSize < BufIn->BufUsed)
-               IncreaseBuf(BufOut, BufIn->BufUsed, 0);
+               IncreaseBuf(BufOut, 0, BufIn->BufUsed);
 
        BufOut->BufUsed = CtdlDecodeBase64(BufOut->buf,
                                           BufIn->buf,
@@ -2859,7 +2840,7 @@ typedef struct __z_enc_stream {
        z_stream zstream;
 } z_enc_stream;
 
-void *StrBufNewStreamContext(eStreamType type, const char **Err)
+vStreamT *StrBufNewStreamContext(eStreamType type, const char **Err)
 {
        base64_decodestate *state;;
        *Err = NULL;
@@ -2870,7 +2851,7 @@ void *StrBufNewStreamContext(eStreamType type, const char **Err)
        case eBase64Encode:
                state = (base64_decodestate*) malloc(sizeof(base64_decodestate));
                base64_init_decodestate(state);
-               return state;
+               return (vStreamT*) state;
                break;
        case eZLibDecode:
        {
@@ -2886,11 +2867,11 @@ void *StrBufNewStreamContext(eStreamType type, const char **Err)
                err = inflateInit(&stream->zstream);
 
                if (err != Z_OK) {
-                       StrBufDestroyStreamContext(type, (void**)&stream, Err);
+                       StrBufDestroyStreamContext(type, (vStreamT**) &stream, Err);
                        *Err = zError(err);
                        return NULL;
                }
-               return stream;
+               return (vStreamT*) stream;
 
        }
        case eZLibEncode:
@@ -2918,11 +2899,11 @@ void *StrBufNewStreamContext(eStreamType type, const char **Err)
                                   DEF_MEM_LEVEL,
                                   Z_DEFAULT_STRATEGY);
                if (err != Z_OK) {
-                       StrBufDestroyStreamContext(type, (void**) &stream, Err);
+                       StrBufDestroyStreamContext(type, (vStreamT**) &stream, Err);
                        *Err = zError(err);
                        return NULL;
                }
-               return stream;
+               return (vStreamT*) stream;
        }
        case eEmtyCodec:
                /// TODO
@@ -2932,7 +2913,7 @@ void *StrBufNewStreamContext(eStreamType type, const char **Err)
        return NULL;
 }
 
-int StrBufDestroyStreamContext(eStreamType type, void **vStream, const char **Err)
+int StrBufDestroyStreamContext(eStreamType type, vStreamT **vStream, const char **Err)
 {
        int err;
        int rc = 0;
@@ -2975,7 +2956,7 @@ int StrBufDestroyStreamContext(eStreamType type, void **vStream, const char **Er
        return rc;
 }
 
-int StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, const char* pIn, long pInLen, void *vStream, int LastChunk, const char **Err)
+int StrBufStreamTranscode(eStreamType type, IOBuffer *Target, IOBuffer *In, const char* pIn, long pInLen, vStreamT *vStream, int LastChunk, const char **Err)
 {
        int rc = 0;
        switch (type)