diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 01fa31790..511a64da2 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -28,6 +28,7 @@ Bug fixes:: * core: fix search of commands with UTF-8 chars in name when option weechat.look.command_incomplete is on (issue #1739) * core: fix display of hotlist in buflist after changing value of option weechat.look.hotlist_sort (issue #1733) + * api: fix add of infolist items in hashtable when prefix contains UTF-8 chars in function hashtable_add_from_infolist (issue #1739) * irc: fix parsing of messages 311, 312, 327 (whois) and 314 (whowas) in case of missing parameters * irc: fix parsing of message 338 (whois, host) sent by Rizon server (issue #1737) * irc: fix display of message 344 received as whois geo info (issue #1736) diff --git a/src/core/wee-hashtable.c b/src/core/wee-hashtable.c index 72743750d..17ccdb6ab 100644 --- a/src/core/wee-hashtable.c +++ b/src/core/wee-hashtable.c @@ -34,6 +34,7 @@ #include "wee-list.h" #include "wee-log.h" #include "wee-string.h" +#include "wee-utf8.h" #include "../plugins/plugin.h" @@ -1123,8 +1124,8 @@ hashtable_add_from_infolist (struct t_hashtable *hashtable, const char *prefix) { struct t_infolist_var *ptr_name, *ptr_value; - char prefix_name[128], option_value[128]; - int prefix_length; + char prefix_name[1024], option_value[1024]; + int prefix_length, prefix_length_utf8; if (!hashtable || !infolist || !infolist->ptr_item || !prefix) return 0; @@ -1135,12 +1136,13 @@ hashtable_add_from_infolist (struct t_hashtable *hashtable, snprintf (prefix_name, sizeof (prefix_name), "%s_name_", prefix); prefix_length = strlen (prefix_name); + prefix_length_utf8 = utf8_strlen (prefix_name); for (ptr_name = infolist->ptr_item->vars; ptr_name; ptr_name = ptr_name->next_var) { if (string_strncasecmp (ptr_name->name, prefix_name, - prefix_length) == 0) + prefix_length_utf8) == 0) { snprintf (option_value, sizeof (option_value), "%s_value_%s", prefix, ptr_name->name + prefix_length);