diff --git a/src/chat.c b/src/chat.c index 7cc4d17..cc43967 100644 --- a/src/chat.c +++ b/src/chat.c @@ -191,8 +191,7 @@ static void chat_onAction(ToxWindow *self, Tox *m, int32_t num, const char *acti char nick[TOX_MAX_NAME_LENGTH]; int n_len = tox_get_name(m, num, (uint8_t *) nick); - - n_len = MIN(n_len, TOXIC_MAX_NAME_LENGTH - 1);; + n_len = MIN(n_len, TOXIC_MAX_NAME_LENGTH - 1); nick[n_len] = '\0'; char timefrmt[TIME_STR_SIZE]; @@ -208,7 +207,15 @@ static void chat_onNickChange(ToxWindow *self, Tox *m, int32_t num, const char * if (self->num != num) return; - snprintf(self->name, sizeof(self->name), "%s", nick); + StatusBar *statusbar = self->stb; + + char tmpname[TOX_MAX_NAME_LENGTH]; + strcpy(tmpname, nick); + int n_len = MIN(len, TOXIC_MAX_NAME_LENGTH - 1); + tmpname[n_len] = '\0'; + + snprintf(statusbar->nick, sizeof(statusbar->nick), "%s", tmpname); + snprintf(self->name, sizeof(self->name), "%s", tmpname); } static void chat_onStatusChange(ToxWindow *self, Tox *m, int32_t num, uint8_t status) @@ -786,7 +793,7 @@ static void chat_onDraw(ToxWindow *self, Tox *m) wattron(statusbar->topline, COLOR_PAIR(YELLOW)); wattron(statusbar->topline, A_BOLD); - wprintw(statusbar->topline, " %s ", self->name); + wprintw(statusbar->topline, " %s ", statusbar->nick); wattroff(statusbar->topline, A_BOLD); if (friends[self->num].is_typing) @@ -794,7 +801,7 @@ static void chat_onDraw(ToxWindow *self, Tox *m) } else { wprintw(statusbar->topline, " o"); wattron(statusbar->topline, A_BOLD); - wprintw(statusbar->topline, " %s ", self->name); + wprintw(statusbar->topline, " %s ", statusbar->nick); wattroff(statusbar->topline, A_BOLD); } @@ -874,6 +881,13 @@ static void chat_onInit(ToxWindow *self, Tox *m) snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg); statusbar->statusmsg_len = s_len; + char nick[TOX_MAX_NAME_LENGTH]; + int n_len = tox_get_name(m, self->num, (uint8_t *) nick); + n_len = MIN(n_len, TOXIC_MAX_NAME_LENGTH - 1); + nick[n_len] = '\0'; + snprintf(statusbar->nick, sizeof(statusbar->nick), "%s", nick); + statusbar->nick_len = n_len; + /* Init subwindows */ ChatContext *ctx = self->chatwin; @@ -938,8 +952,10 @@ ToxWindow new_chat(Tox *m, int32_t friendnum) ret.device_selection[0] = ret.device_selection[1] = -1; #endif /* _SUPPORT_AUDIO */ - char name[TOX_MAX_NAME_LENGTH] = {'\0'}; - tox_get_name(m, friendnum, (uint8_t *) name); + char name[TOX_MAX_NAME_LENGTH]; + int len = tox_get_name(m, friendnum, (uint8_t *) name); + len = MIN(len, TOXIC_MAX_NAME_LENGTH - 1); + name[len] = '\0'; snprintf(ret.name, sizeof(ret.name), "%s", name); ChatContext *chatwin = calloc(1, sizeof(ChatContext)); diff --git a/src/friendlist.c b/src/friendlist.c index a322c29..9e34f5a 100644 --- a/src/friendlist.c +++ b/src/friendlist.c @@ -138,8 +138,12 @@ static void friendlist_onNickChange(ToxWindow *self, Tox *m, int32_t num, const if (len > TOX_MAX_NAME_LENGTH || num >= max_friends_index) return; - snprintf(friends[num].name, sizeof(friends[num].name), "%s", nick); - friends[num].namelength = strlen(friends[num].name); + char tempname[TOX_MAX_NAME_LENGTH]; + strcpy(tempname, nick); + len = MIN(len, TOXIC_MAX_NAME_LENGTH - 1); + tempname[len] = '\0'; + snprintf(friends[num].name, sizeof(friends[num].name), "%s", tempname); + friends[num].namelength = len; sort_friendlist_index(); } @@ -174,17 +178,21 @@ void friendlist_onFriendAdded(ToxWindow *self, Tox *m, int32_t num, bool sort) friends[i].chatwin = -1; friends[i].online = false; friends[i].status = TOX_USERSTATUS_NONE; - friends[i].namelength = tox_get_name(m, num, (uint8_t *) friends[i].name); friends[i].logging_on = (bool) user_settings->autolog == AUTOLOG_ON; tox_get_client_id(m, num, (uint8_t *) friends[i].pub_key); update_friend_last_online(i, tox_get_last_online(m, i)); - if (friends[i].namelength == -1 || friends[i].name[0] == '\0') { + char tempname[TOX_MAX_NAME_LENGTH] = {0}; + int len = tox_get_name(m, num, (uint8_t *) tempname); + + if (len == -1 || tempname[0] == '\0') { strcpy(friends[i].name, UNKNOWN_NAME); friends[i].namelength = strlen(UNKNOWN_NAME); } else { /* Enforce toxic's maximum name length */ - friends[i].namelength = MIN(friends[i].namelength, TOXIC_MAX_NAME_LENGTH); - friends[i].name[friends[i].namelength] = '\0'; + len = MIN(len, TOXIC_MAX_NAME_LENGTH - 1); + friends[i].namelength = len; + tempname[len] = '\0'; + snprintf(friends[i].name, sizeof(friends[i].name), "%s", tempname); } num_friends = tox_count_friendlist(m); @@ -285,7 +293,7 @@ static void delete_friend(Tox *m, int32_t f_num) /* activates delete friend popup */ static void del_friend_activate(ToxWindow *self, Tox *m, int32_t f_num) { - pendingdelete.popup = newwin(3, 22 + TOXIC_MAX_NAME_LENGTH, 8, 8); + pendingdelete.popup = newwin(3, 22 + TOXIC_MAX_NAME_LENGTH - 1, 8, 8); pendingdelete.active = true; pendingdelete.num = f_num; } diff --git a/src/friendlist.h b/src/friendlist.h index 85dfe88..b108b79 100644 --- a/src/friendlist.h +++ b/src/friendlist.h @@ -45,7 +45,7 @@ struct LastOnline { }; typedef struct { - char name[TOX_MAX_NAME_LENGTH]; + char name[TOXIC_MAX_NAME_LENGTH]; int namelength; char statusmsg[TOX_MAX_STATUSMESSAGE_LENGTH]; uint16_t statusmsg_len; diff --git a/src/groupchat.c b/src/groupchat.c index 3ca9732..49cf602 100644 --- a/src/groupchat.c +++ b/src/groupchat.c @@ -133,7 +133,6 @@ static void groupchat_onGroupMessage(ToxWindow *self, Tox *m, int groupnum, int char nick[TOX_MAX_NAME_LENGTH]; int n_len = tox_group_peername(m, groupnum, peernum, (uint8_t *) nick); - n_len = MIN(n_len, TOXIC_MAX_NAME_LENGTH - 1); /* enforce client max name length */ nick[n_len] = '\0'; @@ -147,7 +146,7 @@ static void groupchat_onGroupMessage(ToxWindow *self, Tox *m, int groupnum, int int nick_clr = strcmp(nick, selfnick) == 0 ? GREEN : CYAN; - bool nick_match = strcasestr(msg, selfnick) && strncmp(selfnick, nick, TOXIC_MAX_NAME_LENGTH); + bool nick_match = strcasestr(msg, selfnick) && strncmp(selfnick, nick, TOXIC_MAX_NAME_LENGTH - 1); if (nick_match) { alert_type = WINDOW_ALERT_0; diff --git a/src/windows.h b/src/windows.h index c8c8dfb..5001e85 100644 --- a/src/windows.h +++ b/src/windows.h @@ -115,7 +115,7 @@ struct ToxWindow { #endif /* _SUPPORT_AUDIO */ - char name[TOX_MAX_NAME_LENGTH]; + char name[TOXIC_MAX_NAME_LENGTH]; int32_t num; /* corresponds to friendnumber in chat windows */ bool active; int x; @@ -141,8 +141,8 @@ struct StatusBar { WINDOW *topline; char statusmsg[TOX_MAX_STATUSMESSAGE_LENGTH]; uint16_t statusmsg_len; - char nick[TOX_MAX_NAME_LENGTH]; - uint16_t nick_len; + char nick[TOXIC_MAX_NAME_LENGTH]; + int nick_len; uint8_t status; bool is_online; };