fix(ui,db): harden NULL handling, fix CWE-134, optimize iterations
Some checks failed
CI Code / Code Coverage (push) Failing after 10m34s
CI Code / Check spelling (push) Failing after 10m47s
CI Code / Check coding style (push) Failing after 11m4s
CI Code / Linux (ubuntu) (push) Failing after 11m19s
CI Code / Linux (debian) (push) Failing after 11m28s
CI Code / Linux (arch) (push) Failing after 11m38s
Some checks failed
CI Code / Code Coverage (push) Failing after 10m34s
CI Code / Check spelling (push) Failing after 10m47s
CI Code / Check coding style (push) Failing after 11m4s
CI Code / Linux (ubuntu) (push) Failing after 11m19s
CI Code / Linux (debian) (push) Failing after 11m28s
CI Code / Linux (arch) (push) Failing after 11m38s
security(CWE-134): fix format string injections + add CI check fix(ui): subwindow lifecycle, newwin/newpad guards, fallback timestamps fix(db): sqlite cleanup on failures, sqlite3_close_v2 fix(xmpp): queued_messages loop, barejid leak perf(core): g_hash_table_iter_init instead of g_hash_table_get_keys refactor(ui): CLAMP macro in _check_subwin_width test: XEP-0012 and XEP-0045 functional tests Author: jabber.developer2 Closes #58, #85
This commit is contained in:
@@ -144,10 +144,14 @@ void
|
||||
create_input_window(void)
|
||||
{
|
||||
/* MB_CUR_MAX is evaluated at runtime depending on the current
|
||||
* locale, therefore we check that our own version is big enough
|
||||
* and bail out if it isn't.
|
||||
* locale; ensure our own compiled-in maximum is sufficient.
|
||||
* Fail gracefully instead of aborting in production.
|
||||
*/
|
||||
assert(MB_CUR_MAX <= PROF_MB_CUR_MAX);
|
||||
if (MB_CUR_MAX > PROF_MB_CUR_MAX) {
|
||||
log_error("Locale MB_CUR_MAX (%zu) exceeds compiled limit (%d)", (size_t)MB_CUR_MAX, PROF_MB_CUR_MAX);
|
||||
cons_show_error("Unsupported locale. Before running, execute in terminal: export LC_ALL=C.UTF-8");
|
||||
return;
|
||||
}
|
||||
#ifdef NCURSES_REENTRANT
|
||||
set_escdelay(25);
|
||||
#else
|
||||
@@ -163,6 +167,10 @@ create_input_window(void)
|
||||
rl_callback_handler_install(NULL, _inp_rl_linehandler);
|
||||
|
||||
inp_win = newpad(1, INP_WIN_MAX);
|
||||
if (!inp_win) {
|
||||
log_error("Failed to allocate input window pad");
|
||||
return;
|
||||
}
|
||||
wbkgd(inp_win, theme_attrs(THEME_INPUT_TEXT));
|
||||
keypad(inp_win, TRUE);
|
||||
wmove(inp_win, 0, 0);
|
||||
@@ -238,6 +246,9 @@ inp_readline(void)
|
||||
void
|
||||
inp_win_resize(void)
|
||||
{
|
||||
if (!inp_win) {
|
||||
return;
|
||||
}
|
||||
int col = getcurx(inp_win);
|
||||
int wcols = getmaxx(stdscr);
|
||||
|
||||
@@ -285,8 +296,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 +307,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 +334,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