diff --git a/CHANGELOG.md b/CHANGELOG.md index 56bf615f4..6439ffa04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ SPDX-License-Identifier: GPL-3.0-or-later ### Fixed - core: fix option weechat.look.color_real_white not applied when color is "white" on 16+ colors terminals ([#1742](https://github.com/weechat/weechat/issues/1742)) +- api: fix infinite loop in function string_replace when the search string is empty - 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 - irc: limit size of data received from the server to prevent memory exhaustion diff --git a/src/core/core-string.c b/src/core/core-string.c index 586e6305c..05c469962 100644 --- a/src/core/core-string.c +++ b/src/core/core-string.c @@ -1966,6 +1966,9 @@ string_replace (const char *string, const char *search, const char *replace) if (!string || !search || !replace) return NULL; + if (!search[0]) + return strdup (string); + length1 = strlen (search); length2 = strlen (replace); diff --git a/tests/unit/core/test-core-string.cpp b/tests/unit/core/test-core-string.cpp index 2f9578edf..7abfb06ff 100644 --- a/tests/unit/core/test-core-string.cpp +++ b/tests/unit/core/test-core-string.cpp @@ -1454,6 +1454,8 @@ TEST(CoreString, Replace) WEE_TEST_STR(NULL, string_replace ("string", NULL, "replace")); WEE_TEST_STR(NULL, string_replace (NULL, "search", "replace")); + WEE_TEST_STR("test abc def", string_replace("test abc def", "", "xxx")); + WEE_TEST_STR("test abc def", string_replace("test abc def", "xyz", "xxx")); WEE_TEST_STR("test xxx def", string_replace("test abc def", "abc", "xxx")); WEE_TEST_STR("xxx test xxx def xxx",