Bug 33722 - SOGo: Ошибка в имени папки с третьей буквой "п"
: SOGo: Ошибка в имени папки с третьей буквой "п"
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/libsope)
: unstable
: all Linux
: P3 normal
Assigned To:
:
: https://sogo.nu/bugs/view.php?id=4308
:
:
: 32426
  Show dependency tree
 
Reported: 2017-08-02 17:53 by
Modified: 2017-11-05 19:57 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2017-08-02 17:53:51
При влюченной отладке imap в sogo:
S[0x5649de0f3640]: 4 OK Namespace completed (0.001 + 0.040 + 0.039 secs).
C[0x5649de0d5d30]: 5 LIST "" ""
S[0x5649de0f3640]: * LIST (\Noselect) "/" ""
S[0x5649de0f3640]: 5 OK List completed (0.001 + 0.040 + 0.039 secs).
C[0x5649de0d5d30]: 6 create "INBOX/&BD8EMAQ/BDA-"
S[0x5649de0f3640]: 6 NO Mailbox name is not valid mUTF-7 (0.001 + 0.000 secs).

Другие папки на русском создаются нормально.
При этом созданные через imap папки с "пап" в названии так же не видны через
activesync.
------- Comment #1 From 2017-08-02 17:54:35 -------
В общем проблема в том как sogo отдает название папки dovecot'у.
Создал папку пап через imap, имя у нее в mUTF-7: INBOX/&BD8EMAQ,-
А sogo как видно из первого сообщения пытается создать "INBOX/&BD8EMAQ/BDA-"
------- Comment #2 From 2017-10-06 18:36:05 -------
Проблема внутри SOGo: папки показываются криво и не создаются, если третьей
буквой идёт "п". Например, не создаётся папка "Репка".
Созданные в Thunderbird папки показываются в SOGo как "Паӿка".
------- Comment #3 From 2017-10-06 21:47:15 -------
More observations at: https://sogo.nu/bugs/view.php?id=4308
------- Comment #4 From 2017-10-06 21:50:20 -------
Коллеги, просьба, если можно, не переключать язык комментариев — если начали
по-русски — продолжать по-русски. И наоборот.

Спасибо!
------- Comment #5 From 2017-10-07 03:56:20 -------
По-моему, понятно, что это и как это легко теперь исправить.

В sope неправильная реализация mUTF-7 --
https://tools.ietf.org/html/rfc3501#section-5.1.3 !

Собственно, далеко ходить за демонстрацией не надо. В багрепорте:

C[0x5649de0d5d30]: 6 create "INBOX/&BD8EMAQ/BDA-"
S[0x5649de0f3640]: 6 NO Mailbox name is not valid mUTF-7 (0.001 + 0.000 secs).

а должно быть: "INBOX/&BD8EMAQ,BDA-"

(Если separator = . (по умолчанию бывает) , а не / как в этом примере (мне так
больше нравится вообще), картина затуманивается ещё и преобразованием
внутреннего / в SOGo в .)

А в обратную сторону: откуда берётся этот смешной знак вместо трёх
кириллических букв?

В base64 (а следом и в UTF7 и mUTF7) по одному знаку на 6 бит. В UTF7 это 6 бит
из строки кодов Unicode (не UTF8), если упростить. Три буквы, которые
превращаются не в ту, имеют единицы в последних 6 бит своего кода Unicode.
(Заполнить первые 2 бита -- 4 варианта, это эти три буквы, включая "п", и то,
во что они превращаются.) 6 бит единиц -- самый большой знак в base64, как раз
"/".

В правильном mUTF7 вместо него ",". А sope об этом не знает. Запятая --
недопустимый знак для него, и там в таблице в коде стоит -1. Вот и превращение
во все единицы.

Из-за ошибки получается необычно (для нашего представления о позиционной
записи): последний младший знак переписывает (своими единицами) то, что дал
предыдущий старший знак.
------- Comment #6 From 2017-10-09 08:25:33 -------
Похоже, проблема неправильной кодировки в libsope:
sope-mime/NGImap4/NSString+Imap4.m:- (NSString
*)stringByEncodingImap4FolderName {
------- Comment #7 From 2017-10-09 08:26:49 -------
Точнее, в функции _encodeToModifiedUTF7() в том же файле
------- Comment #8 From 2017-10-09 16:04:38 -------
Да, это место я исправляю. Жаль, что сразу патч не показал, чтоб было ясно
сразу.
------- Comment #9 From 2017-10-10 18:07:26 -------
sope-3.2.10-alt2 -> sisyphus:

Mon Oct 09 2017 Ivan Zakharyaschev <imz@altlinux.org> 3.2.10-alt2
- mUTF7 corrections (RFC3501) for non-ASCII IMAP folder names
  (ALT: #33722, #32426)
------- Comment #10 From 2017-11-05 19:57:35 -------
(In reply to comment #4)
> Коллеги, просьба, если можно, не переключать язык комментариев — если начали
> по-русски — продолжать по-русски. И наоборот.

Да, это разумный принцип, и я его стараюсь придерживаться обычно, а иногда
незаметно для себя нарушаю.