mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-14 18:43:01 +01:00
Fix group whispering for duplicate nicks
If a group has numerous peers with the same nick we now require their public key in order to send a private message. Previously we would greedily send the message to the first peer in the list.
This commit is contained in:
parent
57a439c9b4
commit
398aecdd92
@ -475,6 +475,10 @@ static int group_get_nick_peer_id(uint32_t groupnumber, const char *nick, uint32
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nick == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < chat->max_idx; ++i) {
|
for (uint32_t i = 0; i < chat->max_idx; ++i) {
|
||||||
@ -493,7 +497,7 @@ static int group_get_nick_peer_id(uint32_t groupnumber, const char *nick, uint32
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return count > 0 ? 0 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Gets the peer_id associated with `public_key`.
|
/* Gets the peer_id associated with `public_key`.
|
||||||
@ -509,9 +513,17 @@ int group_get_public_key_peer_id(uint32_t groupnumber, const char *public_key, u
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (public_key == NULL) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen(public_key) < TOX_GROUP_PEER_PUBLIC_KEY_SIZE * 2) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
char key_bin[TOX_GROUP_PEER_PUBLIC_KEY_SIZE];
|
char key_bin[TOX_GROUP_PEER_PUBLIC_KEY_SIZE];
|
||||||
|
|
||||||
if (tox_pk_string_to_bytes(public_key, strlen(public_key), key_bin, sizeof(key_bin)) == -1) {
|
if (tox_pk_string_to_bytes(public_key, TOX_GROUP_PEER_PUBLIC_KEY_SIZE * 2, key_bin, sizeof(key_bin)) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1415,7 +1427,6 @@ static void send_group_prvt_message(ToxWindow *self, Tox *m, uint32_t groupnumbe
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t peer_id = 0;
|
|
||||||
uint32_t name_length = 0;
|
uint32_t name_length = 0;
|
||||||
const char *nick = NULL;
|
const char *nick = NULL;
|
||||||
|
|
||||||
@ -1433,13 +1444,23 @@ static void send_group_prvt_message(ToxWindow *self, Tox *m, uint32_t groupnumbe
|
|||||||
if (chat->peer_list[i].name_length > name_length) {
|
if (chat->peer_list[i].name_length > name_length) {
|
||||||
name_length = chat->peer_list[i].name_length;
|
name_length = chat->peer_list[i].name_length;
|
||||||
nick = chat->peer_list[i].name;
|
nick = chat->peer_list[i].name;
|
||||||
peer_id = chat->peer_list[i].peer_id;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nick == NULL) {
|
if (nick == NULL) {
|
||||||
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Invalid peer name.");
|
if (data_len < TOX_GROUP_PEER_PUBLIC_KEY_SIZE * 2) {
|
||||||
|
line_info_add(self, false, NULL, NULL, SYS_MSG, 0, 0, "Invalid nick.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nick = data;
|
||||||
|
name_length = TOX_GROUP_PEER_PUBLIC_KEY_SIZE * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t peer_id;
|
||||||
|
|
||||||
|
if (group_get_peer_id_of_identifier(self, nick, &peer_id) != 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user