diff options
author | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2014-11-03 23:01:15 -0800 |
---|---|---|
committer | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2014-11-04 17:49:16 -0800 |
commit | 47c53abcb15f5241872c8dc89017b547551919d7 (patch) | |
tree | ad23b31a4dd1702bd6d2fda15c24c8a56a27a436 /src | |
parent | 679901e8fd7a1d42392cc19aa3434cdada3d6597 (diff) |
Fixed base64 encoding/decoding
Diffstat (limited to 'src')
-rw-r--r-- | src/core/basetypes/MCBase64.c | 7 | ||||
-rw-r--r-- | src/core/basetypes/MCBase64.h | 2 | ||||
-rw-r--r-- | src/core/basetypes/MCString.cc | 6 |
3 files changed, 10 insertions, 5 deletions
diff --git a/src/core/basetypes/MCBase64.c b/src/core/basetypes/MCBase64.c index d244805e..3596305c 100644 --- a/src/core/basetypes/MCBase64.c +++ b/src/core/basetypes/MCBase64.c @@ -65,7 +65,7 @@ char * MCEncodeBase64(const char * in, int len) return output; } -char * MCDecodeBase64(const char * in, int len) +char * MCDecodeBase64(const char * in, int len, int * p_outlen) { char * output, * out; int i, c1, c2, c3, c4; @@ -106,6 +106,9 @@ char * MCDecodeBase64(const char * in, int len) } *output = 0; - + if (p_outlen != NULL) { + *p_outlen = (int) (output - out); + } + return out; } diff --git a/src/core/basetypes/MCBase64.h b/src/core/basetypes/MCBase64.h index 7aa64f2a..152b3b1b 100644 --- a/src/core/basetypes/MCBase64.h +++ b/src/core/basetypes/MCBase64.h @@ -14,7 +14,7 @@ extern "C" { #endif -extern char * MCDecodeBase64(const char * in, int len); +extern char * MCDecodeBase64(const char * in, int len, int * p_outlen); extern char * MCEncodeBase64(const char * in, int len); #ifdef __cplusplus diff --git a/src/core/basetypes/MCString.cc b/src/core/basetypes/MCString.cc index 60a84145..642fe6a0 100644 --- a/src/core/basetypes/MCString.cc +++ b/src/core/basetypes/MCString.cc @@ -2396,8 +2396,10 @@ bool String::isEqualCaseInsensitive(String * otherString) Data * String::decodedBase64Data() { const char * utf8 = UTF8Characters(); - char * decoded = MCDecodeBase64(utf8, (unsigned int) strlen(utf8)); - Data * result = Data::dataWithBytes(decoded, (unsigned int) strlen(decoded)); + unsigned int encoded_len = (unsigned int) strlen(utf8); + int decoded_len = 0; + char * decoded = MCDecodeBase64(utf8, encoded_len, &decoded_len); + Data * result = Data::dataWithBytes(decoded, decoded_len); free(decoded); return result; } |