aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2014-11-03 23:01:15 -0800
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2014-11-04 17:49:16 -0800
commit47c53abcb15f5241872c8dc89017b547551919d7 (patch)
treead23b31a4dd1702bd6d2fda15c24c8a56a27a436 /src
parent679901e8fd7a1d42392cc19aa3434cdada3d6597 (diff)
Fixed base64 encoding/decoding
Diffstat (limited to 'src')
-rw-r--r--src/core/basetypes/MCBase64.c7
-rw-r--r--src/core/basetypes/MCBase64.h2
-rw-r--r--src/core/basetypes/MCString.cc6
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;
}