From cbb1a03ccdc58e60c9d69c1fdb61c8689bcf4f58 Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 6 Oct 2026 12:27:32 +0200 Subject: [PATCH] Define canonical avatar names and size limits --- src/chat/chat_member.c | 1 + src/member_files/protocol.c | 6 ++++++ src/member_files/protocol.h | 2 ++ 3 files changed, 9 insertions(+) diff --git a/src/chat/chat_member.c b/src/chat/chat_member.c index 13c33e13..1f05f177 100644 --- a/src/chat/chat_member.c +++ b/src/chat/chat_member.c @@ -9,6 +9,7 @@ #include "chat_member.h" #include "chat_event.h" #include "member_sync.h" +#include "../member_files/protocol.h" #include "../utun_instance.h" #include "../routing_layer/topo_group.h" diff --git a/src/member_files/protocol.c b/src/member_files/protocol.c index 078bfcf1..50d2f0f5 100644 --- a/src/member_files/protocol.c +++ b/src/member_files/protocol.c @@ -3,6 +3,12 @@ #include #include +int mf_avatar_file_valid(const char* file) { + if (!file || strlen(file) != 68 || strcmp(file + 64, ".png")) return 0; + for (unsigned i = 0; i < 64; i++) if (!((file[i] >= '0' && file[i] <= '9') || (file[i] >= 'a' && file[i] <= 'f'))) return 0; + return 1; +} + uint64_t mf_get64(const uint8_t* p) { uint64_t v = 0; for (unsigned i = 0; i < 8; i++) v |= (uint64_t)p[i] << (8 * i); diff --git a/src/member_files/protocol.h b/src/member_files/protocol.h index 72e67a19..82b6d81a 100644 --- a/src/member_files/protocol.h +++ b/src/member_files/protocol.h @@ -22,6 +22,8 @@ extern "C" { #define MF_WIRE_MAX (MF_WIRE_HEADER + 2 * MF_PATH_MAX + MF_BLOCK_SIZE) #define MF_ENTRY_HEADER 35 #define MF_QUOTA_BYTES 40 /* used/limit/reserved в байтах, files/directories; пять u64 LE */ +#define MF_AVATAR_MAX_BYTES (1024 * 1024) +int mf_avatar_file_valid(const char* file); #define MF_IDLE_TB 100000ULL /* 10 секунд */ #define MF_REQUEST 1 #define MF_RESPONSE 2