fix(mam, log): improve datetime handling and memory management in MAM and log fetching
- Introduce static helper `_truncate_datetime_suffix()` to safely trim datetime strings, removing unwanted suffixes like timezone offsets - Replace manual string management with auto_gchar and g_strdup for safer, clearer ownership and to prevent leaks - Add safety checks and logging warnings for unexpected datetime string lengths or null pointers - Refactor _mam_rsm_id_handler to use the helper function and updated string handling - Change log_database_get_previous_chat parameters for consistent ownership semantics, avoiding double frees and mem leaks - Overall improve stability and prevent memory leaks during log database queries
This commit is contained in:
@@ -2752,6 +2752,22 @@ iq_mam_request(ProfChatWin* win, GDateTime* enddate)
|
||||
return;
|
||||
}
|
||||
|
||||
// Trim the last 3 characters from the datetime string to remove unwanted suffix (timezone offset)
|
||||
static void
|
||||
_truncate_datetime_suffix(gchar* str)
|
||||
{
|
||||
if (!str) {
|
||||
log_warning("_truncate_datetime_suffix(): unexpected null datetime string");
|
||||
return;
|
||||
}
|
||||
size_t len = strlen(str);
|
||||
if (len >= 3) {
|
||||
str[len - 3] = '\0';
|
||||
} else {
|
||||
log_warning("_truncate_datetime_suffix(): unexpected short datetime string: %s", str);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
_mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata)
|
||||
{
|
||||
@@ -2773,17 +2789,17 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata)
|
||||
|
||||
buffer_remove_entry(window->layout->buffer, 0);
|
||||
|
||||
auto_char char* start_str = NULL;
|
||||
auto_gchar gchar* start_str = NULL;
|
||||
if (data->start_datestr) {
|
||||
start_str = strdup(data->start_datestr);
|
||||
start_str = g_strdup(data->start_datestr);
|
||||
// Convert to iso8601
|
||||
start_str[strlen(start_str) - 3] = '\0';
|
||||
_truncate_datetime_suffix(start_str);
|
||||
}
|
||||
char* end_str = NULL;
|
||||
auto_gchar gchar* end_str = NULL;
|
||||
if (data->end_datestr) {
|
||||
end_str = strdup(data->end_datestr);
|
||||
end_str = g_strdup(data->end_datestr);
|
||||
// Convert to iso8601
|
||||
end_str[strlen(end_str) - 3] = '\0';
|
||||
_truncate_datetime_suffix(end_str);
|
||||
}
|
||||
|
||||
if (is_complete || !data->fetch_next) {
|
||||
|
||||
Reference in New Issue
Block a user