fix(ui,db): harden NULL handling and resource lifecycle across UI and SQLite
Some checks failed
CI Code / Linux (arch) (pull_request) Failing after 20s
CI Code / Check spelling (pull_request) Successful in 24s
CI Code / Check coding style (pull_request) Failing after 36s
CI Code / Linux (ubuntu) (pull_request) Successful in 15m27s
CI Code / Linux (debian) (pull_request) Successful in 17m51s
Some checks failed
CI Code / Linux (arch) (pull_request) Failing after 20s
CI Code / Check spelling (pull_request) Successful in 24s
CI Code / Check coding style (pull_request) Failing after 36s
CI Code / Linux (ubuntu) (pull_request) Successful in 15m27s
CI Code / Linux (debian) (pull_request) Successful in 17m51s
ui/window: fix subwindow lifecycle (safe delwin on recreate), clamp widths, add fallback timestamp when loading history to avoid NULL deref ui/buffer: add GSList bounds checks; assert non-NULL timestamps when creating entries ui/titlebar: guard newwin failures; make draw/resize/free no-ops when window is NULL ui/statusbar: guard window creation/resize/close; clamp columns; fallback display name if JID parsing fails ui/inputwin: check newpad result; guard resize/getters/close on NULL; safe delwin ui/chatwin: guard buffer_get_entry/time before ISO8601 formatting ui/window_list: validate win_create_* results; don’t insert NULL windows; fix barejid leak in wins_get_by_string db/database: ensure cleanup on sqlite init/open failures; use sqlite3_close_v2 and warn if busy; always return a ProfMessage from log_database_get_limits_info and set current UTC timestamp when is_last with no row; initialize err_msg and free consistently; improve error messages Prevents crashes from NULL dereferences (e.g., during MAM history) and closes small leaks; improves robustness under OOM and allocation failures.
This commit is contained in:
@@ -163,6 +163,10 @@ create_input_window(void)
|
||||
rl_callback_handler_install(NULL, _inp_rl_linehandler);
|
||||
|
||||
inp_win = newpad(1, INP_WIN_MAX);
|
||||
if (!inp_win) {
|
||||
// Failed to allocate input pad; leave inp_win NULL and avoid further use
|
||||
return;
|
||||
}
|
||||
wbkgd(inp_win, theme_attrs(THEME_INPUT_TEXT));
|
||||
keypad(inp_win, TRUE);
|
||||
wmove(inp_win, 0, 0);
|
||||
@@ -238,6 +242,9 @@ inp_readline(void)
|
||||
void
|
||||
inp_win_resize(void)
|
||||
{
|
||||
if (!inp_win) {
|
||||
return;
|
||||
}
|
||||
int col = getcurx(inp_win);
|
||||
int wcols = getmaxx(stdscr);
|
||||
|
||||
@@ -285,8 +292,10 @@ void
|
||||
inp_close(void)
|
||||
{
|
||||
rl_callback_handler_remove();
|
||||
delwin(inp_win);
|
||||
inp_win = NULL;
|
||||
if (inp_win) {
|
||||
delwin(inp_win);
|
||||
inp_win = NULL;
|
||||
}
|
||||
fclose(discard);
|
||||
discard = NULL;
|
||||
}
|
||||
@@ -294,6 +303,9 @@ inp_close(void)
|
||||
char*
|
||||
inp_get_line(void)
|
||||
{
|
||||
if (!inp_win) {
|
||||
return NULL;
|
||||
}
|
||||
werase(inp_win);
|
||||
wmove(inp_win, 0, 0);
|
||||
_inp_win_update_virtual();
|
||||
@@ -318,6 +330,9 @@ inp_set_line(const char* const new_line)
|
||||
char*
|
||||
inp_get_password(void)
|
||||
{
|
||||
if (!inp_win) {
|
||||
return NULL;
|
||||
}
|
||||
werase(inp_win);
|
||||
wmove(inp_win, 0, 0);
|
||||
_inp_win_update_virtual();
|
||||
|
||||
Reference in New Issue
Block a user