mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
Allow empty names and status messages.
This commit is contained in:
parent
7e2839e2d8
commit
8532dc8ae7
|
@ -204,8 +204,7 @@ static int32_t init_new_friend(Messenger *m, const uint8_t *real_pk, uint8_t sta
|
||||||
m->friendlist[i].friendcon_id = friendcon_id;
|
m->friendlist[i].friendcon_id = friendcon_id;
|
||||||
m->friendlist[i].friendrequest_lastsent = 0;
|
m->friendlist[i].friendrequest_lastsent = 0;
|
||||||
id_copy(m->friendlist[i].real_pk, real_pk);
|
id_copy(m->friendlist[i].real_pk, real_pk);
|
||||||
m->friendlist[i].statusmessage = calloc(1, 1);
|
m->friendlist[i].statusmessage_length = 0;
|
||||||
m->friendlist[i].statusmessage_length = 1;
|
|
||||||
m->friendlist[i].userstatus = USERSTATUS_NONE;
|
m->friendlist[i].userstatus = USERSTATUS_NONE;
|
||||||
m->friendlist[i].avatar_info_sent = 0;
|
m->friendlist[i].avatar_info_sent = 0;
|
||||||
m->friendlist[i].avatar_recv_data = NULL;
|
m->friendlist[i].avatar_recv_data = NULL;
|
||||||
|
@ -334,7 +333,6 @@ int m_delfriend(Messenger *m, int32_t friendnumber)
|
||||||
if (m->friendlist[friendnumber].status == FRIEND_ONLINE)
|
if (m->friendlist[friendnumber].status == FRIEND_ONLINE)
|
||||||
remove_online_friend(m, friendnumber);
|
remove_online_friend(m, friendnumber);
|
||||||
|
|
||||||
free(m->friendlist[friendnumber].statusmessage);
|
|
||||||
free(m->friendlist[friendnumber].avatar_recv_data);
|
free(m->friendlist[friendnumber].avatar_recv_data);
|
||||||
remove_request_received(&(m->fr), m->friendlist[friendnumber].real_pk);
|
remove_request_received(&(m->fr), m->friendlist[friendnumber].real_pk);
|
||||||
friend_connection_callbacks(m->fr_c, m->friendlist[friendnumber].friendcon_id, MESSENGER_CALLBACK_INDEX, 0, 0, 0, 0, 0);
|
friend_connection_callbacks(m->fr_c, m->friendlist[friendnumber].friendcon_id, MESSENGER_CALLBACK_INDEX, 0, 0, 0, 0, 0);
|
||||||
|
@ -451,7 +449,7 @@ uint32_t m_sendaction_withid(const Messenger *m, int32_t friendnumber, uint32_t
|
||||||
*/
|
*/
|
||||||
static int m_sendname(const Messenger *m, int32_t friendnumber, const uint8_t *name, uint16_t length)
|
static int m_sendname(const Messenger *m, int32_t friendnumber, const uint8_t *name, uint16_t length)
|
||||||
{
|
{
|
||||||
if (length > MAX_NAME_LENGTH || length == 0)
|
if (length > MAX_NAME_LENGTH)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return write_cryptpacket_id(m, friendnumber, PACKET_ID_NICKNAME, name, length, 0);
|
return write_cryptpacket_id(m, friendnumber, PACKET_ID_NICKNAME, name, length, 0);
|
||||||
|
@ -485,13 +483,15 @@ int setfriendname(Messenger *m, int32_t friendnumber, const uint8_t *name, uint1
|
||||||
*/
|
*/
|
||||||
int setname(Messenger *m, const uint8_t *name, uint16_t length)
|
int setname(Messenger *m, const uint8_t *name, uint16_t length)
|
||||||
{
|
{
|
||||||
if (length > MAX_NAME_LENGTH || length == 0)
|
if (length > MAX_NAME_LENGTH)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (m->name_length == length && memcmp(name, m->name, length) == 0)
|
if (m->name_length == length && (length == 0 || memcmp(name, m->name, length) == 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (length)
|
||||||
memcpy(m->name, name, length);
|
memcpy(m->name, name, length);
|
||||||
|
|
||||||
m->name_length = length;
|
m->name_length = length;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
|
@ -550,10 +550,12 @@ int m_set_statusmessage(Messenger *m, const uint8_t *status, uint16_t length)
|
||||||
if (length > MAX_STATUSMESSAGE_LENGTH)
|
if (length > MAX_STATUSMESSAGE_LENGTH)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (m->statusmessage_length == length && memcmp(m->statusmessage, status, length) == 0)
|
if (m->statusmessage_length == length && (length == 0 || memcmp(m->statusmessage, status, length) == 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (length)
|
||||||
memcpy(m->statusmessage, status, length);
|
memcpy(m->statusmessage, status, length);
|
||||||
|
|
||||||
m->statusmessage_length = length;
|
m->statusmessage_length = length;
|
||||||
|
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
@ -859,10 +861,12 @@ static int set_friend_statusmessage(const Messenger *m, int32_t friendnumber, co
|
||||||
if (friend_not_valid(m, friendnumber))
|
if (friend_not_valid(m, friendnumber))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
uint8_t *newstatus = calloc(length + 1, 1);
|
if (length > MAX_STATUSMESSAGE_LENGTH)
|
||||||
memcpy(newstatus, status, length);
|
return -1;
|
||||||
free(m->friendlist[friendnumber].statusmessage);
|
|
||||||
m->friendlist[friendnumber].statusmessage = newstatus;
|
if (length)
|
||||||
|
memcpy(m->friendlist[friendnumber].statusmessage, status, length);
|
||||||
|
|
||||||
m->friendlist[friendnumber].statusmessage_length = length;
|
m->friendlist[friendnumber].statusmessage_length = length;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1632,7 +1636,6 @@ void kill_messenger(Messenger *m)
|
||||||
kill_networking(m->net);
|
kill_networking(m->net);
|
||||||
|
|
||||||
for (i = 0; i < m->numfriends; ++i) {
|
for (i = 0; i < m->numfriends; ++i) {
|
||||||
free(m->friendlist[i].statusmessage);
|
|
||||||
free(m->friendlist[i].avatar_recv_data);
|
free(m->friendlist[i].avatar_recv_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1990,7 +1993,7 @@ static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
case PACKET_ID_NICKNAME: {
|
case PACKET_ID_NICKNAME: {
|
||||||
if (data_length > MAX_NAME_LENGTH || data_length == 0)
|
if (data_length > MAX_NAME_LENGTH)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Make sure the NULL terminator is present. */
|
/* Make sure the NULL terminator is present. */
|
||||||
|
@ -2009,7 +2012,7 @@ static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len)
|
||||||
}
|
}
|
||||||
|
|
||||||
case PACKET_ID_STATUSMESSAGE: {
|
case PACKET_ID_STATUSMESSAGE: {
|
||||||
if (data_length == 0 || data_length > MAX_STATUSMESSAGE_LENGTH)
|
if (data_length > MAX_STATUSMESSAGE_LENGTH)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Make sure the NULL terminator is present. */
|
/* Make sure the NULL terminator is present. */
|
||||||
|
|
|
@ -201,7 +201,7 @@ typedef struct {
|
||||||
uint8_t name[MAX_NAME_LENGTH];
|
uint8_t name[MAX_NAME_LENGTH];
|
||||||
uint16_t name_length;
|
uint16_t name_length;
|
||||||
uint8_t name_sent; // 0 if we didn't send our name to this friend 1 if we have.
|
uint8_t name_sent; // 0 if we didn't send our name to this friend 1 if we have.
|
||||||
uint8_t *statusmessage;
|
uint8_t statusmessage[MAX_STATUSMESSAGE_LENGTH];
|
||||||
uint16_t statusmessage_length;
|
uint16_t statusmessage_length;
|
||||||
uint8_t statusmessage_sent;
|
uint8_t statusmessage_sent;
|
||||||
USERSTATUS userstatus;
|
USERSTATUS userstatus;
|
||||||
|
|
|
@ -518,7 +518,7 @@ static int delpeer(Group_Chats *g_c, int groupnumber, int peer_index)
|
||||||
|
|
||||||
static int setnick(Group_Chats *g_c, int groupnumber, int peer_index, const uint8_t *nick, uint16_t nick_len)
|
static int setnick(Group_Chats *g_c, int groupnumber, int peer_index, const uint8_t *nick, uint16_t nick_len)
|
||||||
{
|
{
|
||||||
if (nick_len > MAX_NAME_LENGTH || nick_len == 0)
|
if (nick_len > MAX_NAME_LENGTH)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
Group_c *g = get_group_c(g_c, groupnumber);
|
Group_c *g = get_group_c(g_c, groupnumber);
|
||||||
|
@ -528,10 +528,12 @@ static int setnick(Group_Chats *g_c, int groupnumber, int peer_index, const uint
|
||||||
|
|
||||||
/* same name as already stored? */
|
/* same name as already stored? */
|
||||||
if (g->group[peer_index].nick_len == nick_len)
|
if (g->group[peer_index].nick_len == nick_len)
|
||||||
if (!memcmp(g->group[peer_index].nick, nick, nick_len))
|
if (nick_len == 0 || !memcmp(g->group[peer_index].nick, nick, nick_len))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (nick_len)
|
||||||
memcpy(g->group[peer_index].nick, nick, nick_len);
|
memcpy(g->group[peer_index].nick, nick, nick_len);
|
||||||
|
|
||||||
g->group[peer_index].nick_len = nick_len;
|
g->group[peer_index].nick_len = nick_len;
|
||||||
|
|
||||||
if (g_c->peer_namelistchange)
|
if (g_c->peer_namelistchange)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user