From e3f6dab366dd303cca4dce36747346e675cd9a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Wed, 23 Aug 2023 15:24:53 +0200 Subject: [PATCH] irc: fix string comparison when CASEMAPPING is set to "ascii" --- ChangeLog.adoc | 7 +++++ ReleaseNotes.adoc | 5 ++++ src/plugins/irc/irc-server.c | 54 ++++++++++++------------------------ 3 files changed, 30 insertions(+), 36 deletions(-) diff --git a/ChangeLog.adoc b/ChangeLog.adoc index ccde7e8f5..764412a2d 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -10,6 +10,13 @@ This document lists all the changes for each version. + For a list of important changes that require manual actions, please look at release notes. +[[v4.0.5]] +== Version 4.0.5 (under dev) + +Bug fixes:: + + * irc: fix string comparison when CASEMAPPING is set to "ascii" + [[v4.0.4]] == Version 4.0.4 (2023-08-22) diff --git a/ReleaseNotes.adoc b/ReleaseNotes.adoc index 75a148a37..96bd24f4c 100644 --- a/ReleaseNotes.adoc +++ b/ReleaseNotes.adoc @@ -11,6 +11,11 @@ It is recommended to read it when upgrading to a new stable version. + For a complete list of changes, please look at ChangeLog. +[[v4.0.5]] +== Version 4.0.5 (under dev) + +No release notes. + [[v4.0.4]] == Version 4.0.4 (2023-08-22) diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 210cb7561..0c100e89a 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -131,6 +131,8 @@ char *irc_server_options[IRC_SERVER_NUM_OPTIONS][2] = char *irc_server_casemapping_string[IRC_SERVER_NUM_CASEMAPPING] = { "rfc1459", "strict-rfc1459", "ascii" }; +int irc_server_casemapping_range[IRC_SERVER_NUM_CASEMAPPING] = +{ 30, 29, 26 }; char *irc_server_utf8mapping_string[IRC_SERVER_NUM_UTF8MAPPING] = { "none", "rfc8265" }; @@ -294,25 +296,15 @@ int irc_server_strcasecmp (struct t_irc_server *server, const char *string1, const char *string2) { - int casemapping, rc; + int casemapping, range; - casemapping = (server) ? server->casemapping : IRC_SERVER_CASEMAPPING_RFC1459; - switch (casemapping) - { - case IRC_SERVER_CASEMAPPING_RFC1459: - rc = weechat_strcasecmp_range (string1, string2, 30); - break; - case IRC_SERVER_CASEMAPPING_STRICT_RFC1459: - rc = weechat_strcasecmp_range (string1, string2, 29); - break; - case IRC_SERVER_CASEMAPPING_ASCII: - rc = weechat_strcasecmp (string1, string2); - break; - default: - rc = weechat_strcasecmp_range (string1, string2, 30); - break; - } - return rc; + casemapping = (server) ? server->casemapping : -1; + if ((casemapping < 0) || (casemapping >= IRC_SERVER_NUM_CASEMAPPING)) + casemapping = IRC_SERVER_CASEMAPPING_RFC1459; + + range = irc_server_casemapping_range[casemapping]; + + return weechat_strcasecmp_range (string1, string2, range); } /* @@ -329,25 +321,15 @@ int irc_server_strncasecmp (struct t_irc_server *server, const char *string1, const char *string2, int max) { - int casemapping, rc; + int casemapping, range; - casemapping = (server) ? server->casemapping : IRC_SERVER_CASEMAPPING_RFC1459; - switch (casemapping) - { - case IRC_SERVER_CASEMAPPING_RFC1459: - rc = weechat_strncasecmp_range (string1, string2, max, 30); - break; - case IRC_SERVER_CASEMAPPING_STRICT_RFC1459: - rc = weechat_strncasecmp_range (string1, string2, max, 29); - break; - case IRC_SERVER_CASEMAPPING_ASCII: - rc = weechat_strncasecmp (string1, string2, max); - break; - default: - rc = weechat_strncasecmp_range (string1, string2, max, 30); - break; - } - return rc; + casemapping = (server) ? server->casemapping : -1; + if ((casemapping < 0) || (casemapping >= IRC_SERVER_NUM_CASEMAPPING)) + casemapping = IRC_SERVER_CASEMAPPING_RFC1459; + + range = irc_server_casemapping_range[casemapping]; + + return weechat_strncasecmp_range (string1, string2, max, range); } /*