diff --git a/ZNCString.cpp b/ZNCString.cpp index 8a69c19a..70f6e90d 100644 --- a/ZNCString.cpp +++ b/ZNCString.cpp @@ -735,13 +735,8 @@ bool CString::Base64Encode(CString& sRet, unsigned int uWrap) const { return 0; } - //p = output = (unsigned char *)malloc(toalloc); p = output = new unsigned char [toalloc]; - if (!p) { - return false; - } - while (i < len - mod) { *p++ = b64table[input[i++] >> 2]; *p++ = b64table[((input[i - 1] << 4) | (input[i] >> 4)) & 0x3f]; @@ -781,11 +776,16 @@ bool CString::Base64Encode(CString& sRet, unsigned int uWrap) const { } unsigned long CString::Base64Decode(CString& sRet) const { - const char* in = c_str(); + CString sTmp(*this); + // remove new lines + sTmp.Replace("\r", ""); + sTmp.Replace("\n", ""); + + const char* in = sTmp.c_str(); char c, c1, *p; unsigned long i; - unsigned long uLen = size(); - char* out = (char*) malloc(size() +1); + unsigned long uLen = sTmp.size(); + char* out = new char[uLen + 1]; for (i = 0, p = out; i < uLen; i++) { c = (char)base64_table[(unsigned char)in[i++]]; @@ -812,7 +812,7 @@ unsigned long CString::Base64Decode(CString& sRet) const { unsigned long uRet = p - out; sRet.clear(); sRet.append(out, uRet); - free(out); + delete[] out; return uRet; }