b64 prefix: * marker to distinguish base64-encoded display data from old plain text
* prefix prepended in on_media_registered before b64 data on_msg_inserted, chat_core_attachment_download, get_messages_json only attempt b64_decode when prefix starts with '*' marker
This commit is contained in:
1 parent
ea6eeae210
commit
a0049a4187
2 files changed
+16
-10
No files matched your search
+10
-5
@@ -118,6 +118,7 @@ static void on_media_registered(void* arg, int err, const struct media_index_res
|
||||
size_t off = 0;
|
||||
if (base_len > 0) {
|
||||
char b64[2048]; size_t b64len = b64_encode(mctx->msg_data, base_len, b64, sizeof(b64));
|
||||
full_data[off++] = '*';
|
||||
memcpy(full_data + off, b64, b64len); off += b64len;
|
||||
}
|
||||
off += snprintf(full_data + off, fdcap - off, "|%lld|%lld|%d|",
|
||||
@@ -552,9 +553,11 @@ void on_msg_inserted(struct DB_SYNC_INSTANCE* si, uint64_t record_ts, const char
|
||||
while (body[bfi] && body[bfi] != '|' && bfi < sizeof(base_filename) - 1)
|
||||
base_filename[bfi++] = body[bfi];
|
||||
base_filename[bfi] = '\0';
|
||||
/* base64-decode display prefix (encoded in on_media_registered) */
|
||||
uint8_t dec[256]; int dlen = (int)b64_decode(base_filename, bfi, dec, sizeof(dec));
|
||||
if (dlen > 0 && dlen < (int)sizeof(base_filename)) { memcpy(base_filename, dec, (size_t)dlen); base_filename[dlen] = '\0'; }
|
||||
/* base64-decode display prefix if marked with '*' (new format) */
|
||||
if (base_filename[0] == '*' && bfi > 1) {
|
||||
uint8_t dec[256]; int dlen = (int)b64_decode(base_filename + 1, bfi - 1, dec, sizeof(dec));
|
||||
if (dlen > 0 && dlen < (int)sizeof(base_filename)) { memcpy(base_filename, dec, (size_t)dlen); base_filename[dlen] = '\0'; }
|
||||
}
|
||||
if (bfi == 0) snprintf(base_filename, sizeof(base_filename), "file");
|
||||
|
||||
const uint8_t* sig_field = strstr(data, "\"sig\":\"");
|
||||
@@ -636,8 +639,10 @@ void chat_core_attachment_download(const char* channel_id, int64_t msg_id) {
|
||||
while (body[bfi] && body[bfi] != '|' && bfi < sizeof(base_filename) - 1)
|
||||
base_filename[bfi++] = body[bfi];
|
||||
base_filename[bfi] = '\0';
|
||||
uint8_t dec[256]; int dlen = (int)b64_decode(base_filename, bfi, dec, sizeof(dec));
|
||||
if (dlen > 0 && dlen < (int)sizeof(base_filename)) { memcpy(base_filename, dec, (size_t)dlen); base_filename[dlen] = '\0'; }
|
||||
if (base_filename[0] == '*' && bfi > 1) {
|
||||
uint8_t dec[256]; int dlen = (int)b64_decode(base_filename + 1, bfi - 1, dec, sizeof(dec));
|
||||
if (dlen > 0 && dlen < (int)sizeof(base_filename)) { memcpy(base_filename, dec, (size_t)dlen); base_filename[dlen] = '\0'; }
|
||||
}
|
||||
if (bfi == 0) snprintf(base_filename, sizeof(base_filename), "file");
|
||||
|
||||
uint8_t author_sig[64]; memcpy(author_sig, sig_blob, 64);
|
||||
|
||||
Reference in new issue
Block a user