From f65591cb567d89d717397fa3fded2fed739a9539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Sun, 5 Jul 2026 11:59:18 +0200 Subject: [PATCH] api: do not free dynamic string on error in function string_dyn_concat --- CHANGELOG.md | 1 + doc/en/weechat_plugin_api.en.adoc | 2 ++ doc/fr/weechat_plugin_api.fr.adoc | 2 ++ doc/it/weechat_plugin_api.it.adoc | 3 +++ doc/ja/weechat_plugin_api.ja.adoc | 3 +++ doc/sr/weechat_plugin_api.sr.adoc | 3 +++ src/core/core-string.c | 6 ++---- 7 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2542c817..60a98490a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ SPDX-License-Identifier: GPL-3.0-or-later - core: fix possible buffer overflow in command /color alias ([#2330](https://github.com/weechat/weechat/issues/2330)) - core: fix possible buffer overflow in list of commands displayed by /help ([#2330](https://github.com/weechat/weechat/issues/2330)) - api: fix infinite loop in function string_replace when the search string is empty +- api: do not free dynamic string on error in function string_dyn_concat - irc: fix tag in message with list of names when joining a channel - fset: remove error displayed in core buffer when clicking with the mouse below the last option displayed - guile, lua, perl, python, ruby, tcl: fix conversion of dates in the API functions diff --git a/doc/en/weechat_plugin_api.en.adoc b/doc/en/weechat_plugin_api.en.adoc index 4848bca52..9a645831a 100644 --- a/doc/en/weechat_plugin_api.en.adoc +++ b/doc/en/weechat_plugin_api.en.adoc @@ -3474,6 +3474,8 @@ Concatenate a string to a dynamic string. The pointer _*string_ can change if the string is reallocated (if there is not enough space to concatenate the string). +In case of error, the dynamic string is left unchanged. + Prototype: [source,c] diff --git a/doc/fr/weechat_plugin_api.fr.adoc b/doc/fr/weechat_plugin_api.fr.adoc index a52f7fabf..fb02b710d 100644 --- a/doc/fr/weechat_plugin_api.fr.adoc +++ b/doc/fr/weechat_plugin_api.fr.adoc @@ -3532,6 +3532,8 @@ Concaténer une chaîne dans une chaîne dynamique. Le pointeur _*string_ peut changer si la chaîne est réallouée (s'il n'y a pas assez de place pour concaténer la chaîne). +En cas d'erreur, la chaîne dynamique reste inchangée. + Prototype : [source,c] diff --git a/doc/it/weechat_plugin_api.it.adoc b/doc/it/weechat_plugin_api.it.adoc index 70d2f8698..8063791a6 100644 --- a/doc/it/weechat_plugin_api.it.adoc +++ b/doc/it/weechat_plugin_api.it.adoc @@ -3635,6 +3635,9 @@ Concatenate a string to a dynamic string. The pointer _*string_ can change if the string is reallocated (if there is not enough space to concatenate the string). +// TRANSLATION MISSING +In case of error, the dynamic string is left unchanged. + Prototipo: [source,c] diff --git a/doc/ja/weechat_plugin_api.ja.adoc b/doc/ja/weechat_plugin_api.ja.adoc index a5a1bbdbe..e5b23b038 100644 --- a/doc/ja/weechat_plugin_api.ja.adoc +++ b/doc/ja/weechat_plugin_api.ja.adoc @@ -3586,6 +3586,9 @@ _WeeChat バージョン 1.8 以上で利用可, updated in 3.0_ 文字列が再確保された場合 (文字列を連結するのに十分なサイズが確保されていなかった場合) にはポインタ _*string_ が変わる可能性があります。 +// TRANSLATION MISSING +In case of error, the dynamic string is left unchanged. + プロトタイプ: [source,c] diff --git a/doc/sr/weechat_plugin_api.sr.adoc b/doc/sr/weechat_plugin_api.sr.adoc index bde29b0eb..54f5e8cd5 100644 --- a/doc/sr/weechat_plugin_api.sr.adoc +++ b/doc/sr/weechat_plugin_api.sr.adoc @@ -3356,6 +3356,9 @@ _WeeChat ≥ 1.8, ажурирано у верзији 3.0._ Показивач на стринг _*string_ може да се промени ако се стринг реалоцира (у случају да нема довољно простора за надовезивање стринга). +// TRANSLATION MISSING +In case of error, the dynamic string is left unchanged. + Прототип: [source,c] diff --git a/src/core/core-string.c b/src/core/core-string.c index 1e5156260..f53c15af3 100644 --- a/src/core/core-string.c +++ b/src/core/core-string.c @@ -4763,6 +4763,8 @@ string_dyn_copy (char **string, const char *new_string) * if the string had to be extended, or the same pointer if there was enough * size to concatenate the new string. * + * In case of error, the dynamic string is left unchanged. + * * Return: * 1: OK * 0: error @@ -4798,11 +4800,7 @@ string_dyn_concat (char **string, const char *add, int bytes) new_size_alloc = new_size; string_realloc = realloc (ptr_string_dyn->string, new_size_alloc); if (!string_realloc) - { - free (ptr_string_dyn->string); - free (ptr_string_dyn); return 0; - } ptr_string_dyn->string = string_realloc; ptr_string_dyn->size_alloc = new_size_alloc; }