Subject: bug#33653: 27.0.50; Change Gnus obarrays-as-hash-tables into real hash tables

From: Katsumi Yamaoka <[email-masked]>
Date: Mon, 08 Apr 2019 17:13:25 +0900

On Wed, 27 Mar 2019 13:54:42 +0900, Katsumi Yamaoka wrote:
> The group level of nnml:テスト is 1 and there are some unread
> articles in it, however the group is not listed in the Group
> buffer when I launch Gnus by `C-u 1 M-x gnus RET'...

I found a cause of it not to be listed in the group buffer just
after launching Gnus.

The group entry in the ~/Mail/active file is:

テスト 5 1 y

The file coding is utf-8-unix.  So, the binary expression of the
group name is \343\203\206\343\202\271\343\203\210, where \343
is a single character, and this form is what the hash tables use
(in the ~/.newsrc.eld file, "\343" consists of four characters
 "\", "3", "4", and "3", though).

`gnus-active-to-gnus-format' reads it in the following way:

・Load the active file to the " *nntpd*" buffer in the binary
　mode.  Copy it to another temp buffer.  There \343 is a single
　character.
・Read the group name using `(read (current-buffer))'.
　Then it is read as a symbol; \343 is still a single character.
・Convert it to a string using `symbol-name'.
　\343 is expanded into the one consists of four characters. :<
　It should never match to the one in the hash tables.

Why the single-char to four-chars conversion happens is that
the buffer where those processes are done is in the multibyte
mode.  So, the patch attached below solves the problem.  I'm
going to test it for the other back ends...

--- gnus-start.el~	2019-03-25 21:22:46.184139100 +0000
+++ gnus-start.el	2019-04-08 08:07:41.906976900 +0000
@@ -2139,3 +2139,3 @@
 
-    (with-temp-buffer
+    (mm-with-unibyte-buffer
       (insert-buffer-substring cur)