From 1ff001994cdfc1533bb1af965c8fe5685c951f45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Mon, 1 Dec 2025 07:43:35 +0100 Subject: [PATCH] irc: fix creation of irc.msgbuffer option without a server name The regression was introduced by commit 1b669cd13cd543e80868dac17c2c4a6ad7bf4432, which allowed a server name with upper case but rejected a name or alias with upper case. This commit fixed the creation of the option when the server name is not given, so this command works again: /set irc.msgbuffer.whois current --- CHANGELOG.md | 1 + src/plugins/irc/irc-config.c | 56 +++++++++++++++++------------------- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c89d5502..4e3872a97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ SPDX-License-Identifier: GPL-3.0-or-later ### Fixed - core: fix buffer size in function util_parse_time, causing buffer overflow error in unit tests +- irc: fix creation of irc.msgbuffer option without a server name ## Version 4.8.0 (2025-11-30) diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c index 71ae7e92b..07f1a8b73 100644 --- a/src/plugins/irc/irc-config.c +++ b/src/plugins/irc/irc-config.c @@ -1577,7 +1577,8 @@ irc_config_msgbuffer_create_option_cb (const void *pointer, void *data, const char *option_name, const char *value) { struct t_config_option *ptr_option; - char *pos, *name_lower; + const char *pos; + char *name_lower; int rc; /* make C compiler happy */ @@ -1605,36 +1606,33 @@ irc_config_msgbuffer_create_option_cb (const void *pointer, void *data, if (value) { pos = strrchr (option_name, '.'); - if (pos) + pos = (pos) ? pos + 1 : option_name; + name_lower = weechat_string_tolower (pos); + if (name_lower && (strcmp (pos, name_lower) == 0)) { - pos++; - name_lower = weechat_string_tolower (pos); - if (name_lower && (strcmp (pos, name_lower) == 0)) - { - ptr_option = weechat_config_new_option ( - config_file, section, - option_name, "enum", - _("buffer used to display message received from IRC " - "server"), - "weechat|server|current|private", 0, 0, value, value, 0, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - rc = (ptr_option) ? - WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE : - WEECHAT_CONFIG_OPTION_SET_ERROR; - } - else - { - weechat_printf ( - NULL, - _("%s%s: error: invalid option \"%s.%s\", the command " - "name or alias \"%s\" must be lower case"), - weechat_prefix ("error"), IRC_PLUGIN_NAME, - "irc.msgbuffer", option_name, pos); - free (name_lower); - return rc; - } - free (name_lower); + ptr_option = weechat_config_new_option ( + config_file, section, + option_name, "enum", + _("buffer used to display message received from IRC " + "server"), + "weechat|server|current|private", 0, 0, value, value, 0, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + rc = (ptr_option) ? + WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE : + WEECHAT_CONFIG_OPTION_SET_ERROR; } + else + { + weechat_printf ( + NULL, + _("%s%s: error: invalid option \"%s.%s\", the command " + "name or alias \"%s\" must be lower case"), + weechat_prefix ("error"), IRC_PLUGIN_NAME, + "irc.msgbuffer", option_name, pos); + free (name_lower); + return rc; + } + free (name_lower); } else rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE;