Compare commits

..

1 Commits

Author SHA1 Message Date
97fd81b60b fix(review): address F1, F6, F9, F16 from deep review
All checks were successful
CI Code / Check spelling (pull_request) Successful in 15s
CI Code / Check coding style (pull_request) Successful in 32s
CI Code / Linux (debian) (pull_request) Successful in 5m1s
CI Code / Linux (ubuntu) (pull_request) Successful in 5m2s
CI Code / Linux (arch) (pull_request) Successful in 5m47s
CI Code / Code Coverage (pull_request) Successful in 6m35s
- src/log.c (F16): log_stderr_init no longer closes STDERR_FILENO
  immediately after dup2(). The previous 'close(dup_fd)' closed fd 2
  because dup2 returns newfd on success; the in-app stderr capture
  pipe was silently dead, dropping libstrophe/openssl error output.
  Close the original stderr_pipe[1] instead and remember that the
  write end now lives at STDERR_FILENO so _log_stderr_close stays
  correct.

- src/database_sqlite.c (F1): NULL-check sqlite3_mprintf result
  before passing it to sqlite3_exec in the DbVersion bootstrap path.

- src/tools/editor.c (F9): drop three orphan #includes
  (<fcntl.h>, <pthread.h>, <readline/readline.h>) left behind when
  9b03e3a50 removed the async-editor path.

- src/xmpp/jid.c (F6): match the g_new0 allocation in jid_create
  with g_free in jid_destroy. Same behaviour on glibc but stops
  being a foot-gun under custom glib allocators.

Verified with ci-build.sh in Debian docker: all 4 configs pass
(644/0, 605/0, 605/0, 644/0 unit + 130/0 functional).
2026-05-21 15:34:33 +03:00
5 changed files with 2 additions and 16 deletions

View File

@@ -43,8 +43,7 @@ _sanitize_account_name(const char* const name)
gchar* sanitized = g_strdup(name);
gchar* p = sanitized;
while (*p) {
// GKeyFile special characters: [ ] = # \n \r
if (*p == '[' || *p == ']' || *p == '=' || *p == '#' || *p == '\n' || *p == '\r') {
if (*p == '[' || *p == ']' || *p == '=') {
*p = '_';
}
p++;

View File

@@ -806,10 +806,6 @@ omemo_on_message_send(ProfWin* win, const char* const message, gboolean request_
key_tag = gcry_malloc_secure(AES128_GCM_KEY_LENGTH + AES128_GCM_TAG_LENGTH);
key = gcry_random_bytes_secure(AES128_GCM_KEY_LENGTH + AES128_GCM_IV_LENGTH, GCRY_VERY_STRONG_RANDOM);
if (!key) {
log_error("[OMEMO][SEND] cannot generate random key/IV");
goto out;
}
iv = key + AES128_GCM_KEY_LENGTH;
res = aes128gcm_encrypt(ciphertext, &ciphertext_len, tag, &tag_len, (const unsigned char* const)message, strlen(message), iv, key);

View File

@@ -121,12 +121,6 @@ launch_editor(gchar* initial_content, void (*callback)(gchar* content, void* dat
ui_suspend();
// Ensure GLib's SIGCHLD handler is installed before forking to prevent
// zombie children if the editor is launched before the main loop starts.
GMainContext* main_ctx = g_main_context_default();
g_main_context_acquire(main_ctx);
g_main_context_release(main_ctx);
pid_t pid = fork();
if (pid == -1) {
log_error("[Editor] Failed to fork: %s", strerror(errno));

View File

@@ -55,8 +55,6 @@ static GTimeZone* tz;
static StatusBar* statusbar;
static WINDOW* statusbar_win;
#define CONSOLE_TAB_ID 10 // Console tab ID in status bar hash table
void _get_range_bounds(guint* start, guint* end, gboolean is_static);
static guint _status_bar_draw_time(guint pos);
static guint _status_bar_draw_maintext(guint pos);
@@ -159,7 +157,7 @@ void
status_bar_current(guint i)
{
if (i == 0) {
statusbar->current_tab = CONSOLE_TAB_ID;
statusbar->current_tab = 10;
} else {
statusbar->current_tab = i;
}

View File

@@ -32,7 +32,6 @@ Jid*
jid_create(const gchar* const str)
{
if (!jid_is_valid(str)) {
log_debug("[JID] invalid JID: '%s'", str ?: "(null)");
return NULL;
}