]> jfr.im git - irc/weechat/weechat.git/commitdiff
irc: fix string comparison when CASEMAPPING is set to "ascii"
authorSébastien Helleu <redacted>
Wed, 23 Aug 2023 13:24:53 +0000 (15:24 +0200)
committerSébastien Helleu <redacted>
Thu, 24 Aug 2023 07:23:30 +0000 (09:23 +0200)
ChangeLog.adoc
ReleaseNotes.adoc
src/plugins/irc/irc-server.c

index ccde7e8f5178e3ca735b62f55e64d423390700e6..764412a2dfe7a95ae012b2693639335f570ee180 100644 (file)
@@ -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)
 
index 75a148a37353661c60e0aea076a1006b15f08cd9..96bd24f4c3687e8d2bc80467e7aa1da0e333eb07 100644 (file)
@@ -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)
 
index 210cb7561f681f336422d57f776dbd69767dd2c2..0c100e89a2e3babcb9305383582365dcc0e8575a 100644 (file)
@@ -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);
 }
 
 /*