Summary: | SOGo: Ошибка в имени папки с третьей буквой "п" | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Igor Golubkov <BcTpe4HbIu> |
Component: | libsope | Assignee: | Ivan Zakharyaschev <imz> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P3 | CC: | aen, cas, dd, imz |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux | ||
URL: | https://sogo.nu/bugs/view.php?id=4308 | ||
Bug Depends on: | |||
Bug Blocks: | 32426 |
Description
Igor Golubkov
2017-08-02 17:53:51 MSK
В общем проблема в том как sogo отдает название папки dovecot'у. Создал папку пап через imap, имя у нее в mUTF-7: INBOX/&BD8EMAQ,- А sogo как видно из первого сообщения пытается создать "INBOX/&BD8EMAQ/BDA-" Проблема внутри SOGo: папки показываются криво и не создаются, если третьей буквой идёт "п". Например, не создаётся папка "Репка". Созданные в Thunderbird папки показываются в SOGo как "Паӿка". More observations at: https://sogo.nu/bugs/view.php?id=4308 Коллеги, просьба, если можно, не переключать язык комментариев — если начали по-русски — продолжать по-русски. И наоборот. Спасибо! По-моему, понятно, что это и как это легко теперь исправить. В 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. Вот и превращение во все единицы. Из-за ошибки получается необычно (для нашего представления о позиционной записи): последний младший знак переписывает (своими единицами) то, что дал предыдущий старший знак. Похоже, проблема неправильной кодировки в libsope: sope-mime/NGImap4/NSString+Imap4.m:- (NSString *)stringByEncodingImap4FolderName { Точнее, в функции _encodeToModifiedUTF7() в том же файле Да, это место я исправляю. Жаль, что сразу патч не показал, чтоб было ясно сразу. 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) (In reply to comment #4) > Коллеги, просьба, если можно, не переключать язык комментариев — если начали > по-русски — продолжать по-русски. И наоборот. Да, это разумный принцип, и я его стараюсь придерживаться обычно, а иногда незаметно для себя нарушаю. |