Deinit ncurses before fatal crash

This commit is contained in:
Night Kaly 2024-09-20 18:09:56 +01:00
parent 87b3f984c1
commit eb3a859e97
Signed by: night0721
GPG key ID: 957D67B8DB7A119B
4 changed files with 18 additions and 12 deletions

View file

@ -22,6 +22,7 @@ void draw_border(WINDOW *window, bool active);
void add_message(uint8_t *author, uint8_t *recipient, uint8_t *content, uint32_t length, time_t creation); void add_message(uint8_t *author, uint8_t *recipient, uint8_t *content, uint32_t length, time_t creation);
void show_chat(uint8_t *recipient); void show_chat(uint8_t *recipient);
void add_username(char *username); void add_username(char *username);
void ncurses_deinit();
void ui(); void ui();
#endif #endif

View file

@ -214,11 +214,7 @@ int verify_packet(packet_t *pkt, int fd)
int status = recv_packet(pkt, fd, ZSM_TYP_MESSAGE); int status = recv_packet(pkt, fd, ZSM_TYP_MESSAGE);
if (status != ZSM_STA_SUCCESS) { if (status != ZSM_STA_SUCCESS) {
close(fd); close(fd);
if (status == ZSM_STA_CLOSED_CONNECTION) { return status;
error(1, "Server closed connection");
}
return ZSM_STA_ERROR_INTEGRITY;
} }
uint8_t from[MAX_NAME], to[MAX_NAME]; uint8_t from[MAX_NAME], to[MAX_NAME];

View file

@ -66,7 +66,12 @@ void *receive_worker(void *arg)
while (1) { while (1) {
packet_t pkt; packet_t pkt;
if (verify_packet(&pkt, sockfd) != ZSM_STA_SUCCESS) { int status = verify_packet(&pkt, sockfd);
if (status != ZSM_STA_SUCCESS) {
if (status == ZSM_STA_CLOSED_CONNECTION) {
ncurses_deinit();
error(1, "Server closed connection");
}
error(0, "Error verifying packet"); error(0, "Error verifying packet");
} }
size_t cipher_len = pkt.length - NONCE_SIZE - MAX_NAME * 2; size_t cipher_len = pkt.length - NONCE_SIZE - MAX_NAME * 2;

View file

@ -539,6 +539,13 @@ void send_message()
show_chat(recipient); show_chat(recipient);
} }
void ncurses_deinit()
{
arraylist_free(users);
arraylist_free(marked);
endwin();
}
/* /*
* Main loop of user interface * Main loop of user interface
*/ */
@ -577,7 +584,8 @@ void ui(int fd)
ch = getch(); ch = getch();
switch (ch) { switch (ch) {
case CTRLD: case CTRLD:
goto cleanup; ncurses_deinit();
break;
/* go up by k or up arrow */ /* go up by k or up arrow */
case UP: case UP:
@ -617,16 +625,12 @@ void ui(int fd)
curs_pos = 0; curs_pos = 0;
content[0] = '\0'; content[0] = '\0';
} }
default: default:
if (current_window == CHAT_WINDOW) if (current_window == CHAT_WINDOW)
get_chatbox_content(ch); get_chatbox_content(ch);
} }
} }
cleanup:
arraylist_free(users);
arraylist_free(marked);
endwin();
return; return;
} }