@ -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 ) ;