Browse Source

Reject group avatar commands outside a running chat service

master
evgeny 6 days ago
parent
commit
2bcba58131
  1. 6
      src/chat/group_avatar.c
  2. 5
      tools/chatgui/src/avatars/groupavatarmanager.cpp

6
src/chat/group_avatar.c

@ -113,7 +113,8 @@ static void ga_changed(struct UTUN_INSTANCE* inst, uint64_t group) {
}
int group_avatar_apply(struct UTUN_INSTANCE* inst, uint64_t group, const struct group_avatar_record* r) {
if (!r || ga_verify(inst, group, r) < 0) return -1;
if (!r) { DEBUG_ERROR(DEBUG_CATEGORY_CHAT, "group avatar: missing candidate record"); return -1; }
if (ga_verify(inst, group, r) < 0) return -1;
struct group_avatar_record current;
if (group_avatar_get(inst, group, &current) < 0) return -1;
int newer = ga_compare(r->version, r->hash, current.version, current.hash);
@ -140,7 +141,8 @@ int group_avatar_apply(struct UTUN_INSTANCE* inst, uint64_t group, const struct
}
int group_avatar_set(struct UTUN_INSTANCE* inst, uint64_t group, const uint8_t* data, size_t size) {
if (!inst || size > GROUP_AVATAR_MAX || (size && !data) || !member_files_member(inst, group, inst->node_id, 0)) {
if (!inst || !CC(inst) || !CC(inst)->initialized || !CC(inst)->db || size > GROUP_AVATAR_MAX ||
(size && !data) || !member_files_member(inst, group, inst->node_id, 0)) {
DEBUG_WARN(DEBUG_CATEGORY_CHAT, "group avatar: publication denied group=%llu bytes=%zu", (unsigned long long)group, size); return -1;
}
uint8_t key[32], bytes[GROUP_AVATAR_MAX + 64]; char ch[32]; ga_channel(group, ch);

5
tools/chatgui/src/avatars/groupavatarmanager.cpp

@ -62,7 +62,10 @@ QImage GroupAvatarManager::image(const QString& channel, quint64 version, const
}
void GroupAvatarManager::upload(const QString& channel, const QString& source) {
if (!gui_bridge_is_uasync_ready()) { emit status(channel, text("Chat is stopped")); return; }
if (!gui_bridge_is_uasync_ready()) {
DEBUG_WARN(DEBUG_CATEGORY_CHAT, "group avatar: upload requested while chat is stopped channel=%s", qPrintable(channel));
emit status(channel, text("Chat is stopped")); return;
}
quint64 generation = ++m_generation[channel]; emit status(channel, text("Preparing group avatar…"));
m_pool.start(QRunnable::create([this, channel, source, generation] {
QImageReader reader(source); reader.setAutoTransform(true); QImage image; QByteArray encoded; QString error;

Loading…
Cancel
Save