From ef842c5e62baf64acd30b49304e28312b7745f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Sun, 4 Dec 2022 21:22:11 +0100 Subject: [PATCH] core: fix function string_cut when there are non printable chars in suffix --- src/core/wee-string.c | 2 +- tests/unit/core/test-core-string.cpp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/core/wee-string.c b/src/core/wee-string.c index 1fcb18716..971882f7c 100644 --- a/src/core/wee-string.c +++ b/src/core/wee-string.c @@ -134,7 +134,7 @@ string_cut (const char *string, int length, int count_suffix, int screen, if (count_suffix) { if (screen) - length -= utf8_strlen_screen (cut_suffix); + length -= gui_chat_strlen_screen (cut_suffix); else length -= utf8_strlen (cut_suffix); if (length < 0) diff --git a/tests/unit/core/test-core-string.cpp b/tests/unit/core/test-core-string.cpp index bf39035b9..525026799 100644 --- a/tests/unit/core/test-core-string.cpp +++ b/tests/unit/core/test-core-string.cpp @@ -222,6 +222,8 @@ TEST(CoreString, Case) TEST(CoreString, Cut) { + char suffix[128], string[128]; + POINTERS_EQUAL(NULL, string_cut (NULL, 0, 0, 0, NULL)); STRCMP_EQUAL("", string_cut ("", 0, 0, 0, NULL)); @@ -317,6 +319,25 @@ TEST(CoreString, Cut) STRCMP_EQUAL("こ", string_cut ("こんにちは世界", 3, 1, 1, NULL)); STRCMP_EQUAL("こ+", string_cut ("こんにちは世界", 3, 1, 1, "+")); STRCMP_EQUAL("こ…", string_cut ("こんにちは世界", 3, 1, 1, "…")); + + /* cut suffix using color and 1 char */ + snprintf (suffix, sizeof (suffix), "%s+", gui_color_get_custom ("red")); + snprintf (string, sizeof (string), "te%s+", gui_color_get_custom ("red")); + STRCMP_EQUAL(string, string_cut ("test", 3, 1, 1, suffix)); + + /* cut suffix using color and 2 chars */ + snprintf (suffix, sizeof (suffix), "%s++", gui_color_get_custom ("red")); + snprintf (string, sizeof (string), "t%s++", gui_color_get_custom ("red")); + STRCMP_EQUAL(string, string_cut ("test", 3, 1, 1, suffix)); + + /* cut suffix using color and 3 chars */ + snprintf (suffix, sizeof (suffix), "%s+++", gui_color_get_custom ("red")); + snprintf (string, sizeof (string), "%s+++", gui_color_get_custom ("red")); + STRCMP_EQUAL(string, string_cut ("test", 3, 1, 1, suffix)); + + /* cut suffix using color and 4 chars */ + snprintf (suffix, sizeof (suffix), "%s++++", gui_color_get_custom ("red")); + STRCMP_EQUAL("", string_cut ("test", 3, 1, 1, suffix)); } /*