From 42c65cebcbf70cbc3be99ec0845f77995f06bf9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Sun, 22 Dec 2024 19:05:52 +0100 Subject: [PATCH] api: allow to add empty buffer with function infolist_new_var_buffer This fixes the following error with `/upgrade` command when relay clients are connected: relay: failed to save upgrade data --- CHANGELOG.md | 1 + src/core/core-infolist.c | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15eb56bd6..cb44d4c67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixed +- api: allow to add empty buffer with function infolist_new_var_buffer - core: fix detection of dl library ([#2218](https://github.com/weechat/weechat/issues/2218)) - logger: fix path displayed when the logs directory can not be created - perl: fix build with Perl < 5.7.29 ([#2219](https://github.com/weechat/weechat/issues/2219), [#2220](https://github.com/weechat/weechat/issues/2220)) diff --git a/src/core/core-infolist.c b/src/core/core-infolist.c index c851bfa1e..6d97805f3 100644 --- a/src/core/core-infolist.c +++ b/src/core/core-infolist.c @@ -247,17 +247,27 @@ infolist_new_var_buffer (struct t_infolist_item *item, { struct t_infolist_var *new_var; - if (!item || !name || !name[0] || (size <= 0)) + if (!item || !name || !name[0]) return NULL; + if (size < 0) + size = 0; + new_var = malloc (sizeof (*new_var)); if (new_var) { new_var->name = strdup (name); new_var->type = INFOLIST_BUFFER; - new_var->value = malloc (size); - if (new_var->value) - memcpy (new_var->value, pointer, size); + if (pointer && (size > 0)) + { + new_var->value = malloc (size); + if (new_var->value) + memcpy (new_var->value, pointer, size); + } + else + { + new_var->value = NULL; + } new_var->size = size; new_var->prev_var = item->last_var;