Bug 34751
| Summary: | Создаваемые архивы с кириллическими именами файлов неправильно открываются в Windows | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Michael Shigorin <mike> |
| Component: | zip | Assignee: | Andrew Vasilyev <andy> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P3 | CC: | admsasha, aen, andy, darktemplar, imz, kopilo4ka, ldv, mike, tt |
| Version: | unstable | Keywords: | regression, usability |
| Hardware: | all | ||
| OS: | Linux | ||
| Bug Depends on: | 14125 | ||
| Bug Blocks: | 34231 | ||
В штатной установке проблема ушла сама, но остаётся один воспроизводимый случай. zip 3.0-alt5 (задание https://packages.altlinux.org/tasks/396095/), natspec-патч отключён (в spec %%patch3 закомментирован). Контейнер Sisyphus, zip -r архива с файлом "привет.txt" при LANG=C, C.UTF-8 и ru_RU.UTF-8 — во всех трёх случаях заголовок начинается с 50 4b 03 04 0a 00 00 08 то есть general purpose flags = 0x0800, бит 11 (UTF-8) выставлен; python3 -c "import zipfile" подтверждает: flag_bits=0x0800, bit11=True, name=привет.txt; zipinfo показывает имя как Unicode. Механизм: zip.c:2214-2222 пробует setlocale(LC_CTYPE, "en_US.UTF-8") и при успехе ставит using_utf8=1, а zipfile.c:5402-5404 — сам бит. Случай, где бит не ставится: система без glibc-locales. После rpm -e --nodeps glibc-locales (доступна только встроенная C.UTF-8) тот же архив получает flag_bits=0x0000, bit11=False и битое имя — даже при LANG=C.UTF-8, потому что проверяется именно наличие локали en_US.UTF-8, а не кодировка текущей локали. Отсюда два варианта починки: Requires: glibc-locales либо патч в zip.c — пробовать "C.UTF-8" вторым кандидатом или смотреть nl_langinfo(CODESET). Оставляю открытым на ваше решение. (Ответ для Anton Farygin на комментарий #1) > Отсюда два варианта починки: Requires: glibc-locales либо патч в zip.c — > пробовать "C.UTF-8" вторым кандидатом или смотреть nl_langinfo(CODESET). > Оставляю открытым на ваше решение. Сделал второй вариант, просьба проверить из задания #432513 zip-30000000:3.0-alt6 -> sisyphus: Thu Sep 10 2026 Andrew A. Vasilyev <andy@altlinux> 30000000:3.0-alt6 - Try C.UTF-8 locale if setting of en_US.UTF-8 fails (Closes: #34751). Проверил zip-3.0-alt6 из Сизифа (задание 432513) в окружении, где в /usr/lib/locale есть только C.utf8 из glibc-core, без glibc-locales, setlocale(en_US.UTF-8) возвращает NULL. При LANG=C, C.UTF-8, ru_RU.UTF-8 и en_US.UTF-8 архив с файлом привет.txt получает general purpose flags 0x0800 (бит 11, UTF-8), python3 zipfile читает имя как привет.txt. Исправлено, спасибо. |

Description
Michael Shigorin 2018-04-02 20:22:21 MSK