|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
diff --git a/src/b64.c b/src/b64.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
index b8736da..9e35251 100644
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
--- a/src/b64.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+++ b/src/b64.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -55,7 +55,7 @@ VERSION HISTORY:
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
\******************************************************************* */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
/* system headers */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
-#include <stdlib.h>
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+#include <stdio.h>
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
#include <string.h>
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
/* libotr headers */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -147,8 +147,9 @@ static size_t decode(unsigned char *out, const char *in, size_t b64len)
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
* base64 decode data. Skip non-base64 chars, and terminate at the
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
* first '=', or the end of the buffer.
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
*
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- * The buffer data must contain at least (base64len / 4) * 3 bytes of
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- * space. This function will return the number of bytes actually used.
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ * The buffer data must contain at least ((base64len+3) / 4) * 3 bytes
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ * of space. This function will return the number of bytes actually
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ * used.
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
*/
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
size_t otrl_base64_decode(unsigned char *data, const char *base64data,
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
size_t base64len)
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -234,13 +235,18 @@ int otrl_base64_otr_decode(const char *msg, unsigned char **bufp,
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
return -2;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
}
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ /* Skip over the "?OTR:" */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ otrtag += 5;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ msglen -= 5;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
/* Base64-decode the message */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- rawlen = ((msglen-5) / 4) * 3; /* maximum possible */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ rawlen = OTRL_B64_MAX_DECODED_SIZE(msglen); /* maximum possible */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
rawmsg = malloc(rawlen);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
if (!rawmsg && rawlen > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
return -1;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
}
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- rawlen = otrl_base64_decode(rawmsg, otrtag+5, msglen-5); /* actual size */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ rawlen = otrl_base64_decode(rawmsg, otrtag, msglen); /* actual size */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
*bufp = rawmsg;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
*lenp = rawlen;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
diff --git a/src/b64.h b/src/b64.h
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
index 34ef03f..dd0e115 100644
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
--- a/src/b64.h
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+++ b/src/b64.h
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -20,6 +20,19 @@
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
#ifndef __B64_H__
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
#define __B64_H__
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+#include <stdlib.h>
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+/* Base64 encodes blocks of this many bytes: */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+#define OTRL_B64_DECODED_LEN 3
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+/* into blocks of this many bytes: */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+#define OTRL_B64_ENCODED_LEN 4
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+/* An encoded block of length encoded_len can turn into a maximum of
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ * this many decoded bytes: */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+#define OTRL_B64_MAX_DECODED_SIZE(encoded_len) \
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ (((encoded_len + OTRL_B64_ENCODED_LEN - 1) / OTRL_B64_ENCODED_LEN) \
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ * OTRL_B64_DECODED_LEN)
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
/*
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
* base64 encode data. Insert no linebreaks or whitespace.
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
*
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -33,8 +46,9 @@ size_t otrl_base64_encode(char *base64data, const unsigned char *data,
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
* base64 decode data. Skip non-base64 chars, and terminate at the
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
* first '=', or the end of the buffer.
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
*
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- * The buffer data must contain at least (base64len / 4) * 3 bytes of
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- * space. This function will return the number of bytes actually used.
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ * The buffer data must contain at least ((base64len+3) / 4) * 3 bytes
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ * of space. This function will return the number of bytes actually
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ * used.
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
*/
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
size_t otrl_base64_decode(unsigned char *data, const char *base64data,
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
size_t base64len);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
diff --git a/src/proto.c b/src/proto.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
index 3f8c987..0374dfe 100644
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
--- a/src/proto.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+++ b/src/proto.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -537,13 +537,17 @@ gcry_error_t otrl_proto_data_read_flags(const char *datamsg,
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
msglen = strlen(otrtag);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
}
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ /* Skip over the "?OTR:" */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ otrtag += 5;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ msglen -= 5;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
/* Base64-decode the message */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- rawlen = ((msglen-5) / 4) * 3; /* maximum possible */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ rawlen = OTRL_B64_MAX_DECODED_SIZE(msglen); /* maximum possible */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
rawmsg = malloc(rawlen);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
if (!rawmsg && rawlen > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
return gcry_error(GPG_ERR_ENOMEM);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
}
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- rawlen = otrl_base64_decode(rawmsg, otrtag+5, msglen-5); /* actual size */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ rawlen = otrl_base64_decode(rawmsg, otrtag, msglen); /* actual size */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
bufp = rawmsg;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
lenp = rawlen;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -606,14 +610,18 @@ gcry_error_t otrl_proto_accept_data(char **plaintextp, OtrlTLV **tlvsp,
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
msglen = strlen(otrtag);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
}
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ /* Skip over the "?OTR:" */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ otrtag += 5;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ msglen -= 5;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
/* Base64-decode the message */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- rawlen = ((msglen-5) / 4) * 3; /* maximum possible */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ rawlen = OTRL_B64_MAX_DECODED_SIZE(msglen); /* maximum possible */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
rawmsg = malloc(rawlen);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
if (!rawmsg && rawlen > 0) {
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
err = gcry_error(GPG_ERR_ENOMEM);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
goto err;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
}
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- rawlen = otrl_base64_decode(rawmsg, otrtag+5, msglen-5); /* actual size */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ rawlen = otrl_base64_decode(rawmsg, otrtag, msglen); /* actual size */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
bufp = rawmsg;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
lenp = rawlen;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
diff --git a/toolkit/parse.c b/toolkit/parse.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
index 5f357fc..16718ca 100644
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
--- a/toolkit/parse.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+++ b/toolkit/parse.c
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -64,7 +64,8 @@ static unsigned char *decode(const char *msg, size_t *lenp)
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
{
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
const char *header, *footer;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
unsigned char *raw;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
-
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ size_t rawlen;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
/* Find the header */
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
header = strstr(msg, "?OTR:");
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
if (!header) return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
@@ -75,8 +76,10 @@ static unsigned char *decode(const char *msg, size_t *lenp)
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
footer = strchr(header, '.');
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
if (!footer) footer = header + strlen(header);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- raw = malloc((footer-header) / 4 * 3);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
- if (raw == NULL && (footer-header >= 4)) return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ rawlen = OTRL_B64_MAX_DECODED_SIZE(footer-header);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ raw = malloc(rawlen);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
+ if (raw == NULL && rawlen > 0) return NULL;
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
*lenp = otrl_base64_decode(raw, header, footer-header);
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
|
|
![](https://seccdn.libravatar.org/avatar/8baa18bd3f784ebc78a53e1f043a80413ddd5b0615728445ae90c138acdd13da?s=16&d=retro) |
a4a15e5 |
return raw;
|