Bug 41885
| Summary: | wxGetEnv не работает с UTF-8 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | manowar <manowar> | ||||||
| Component: | wxGTK3.2 | Assignee: | Антон Мидюков <antohami> | ||||||
| Status: | RESOLVED FIXED | QA Contact: | qa-sisyphus | ||||||
| Severity: | normal | ||||||||
| Priority: | P5 | CC: | antohami, manowar | ||||||
| Version: | unstable | ||||||||
| Hardware: | x86_64 | ||||||||
| OS: | Linux | ||||||||
| Attachments: |
|
||||||||
Created attachment 10260 [details]
Программа для проверки
Прикладываю прогу, которой проверял: [builder@localhost ~]$ echo $LANG ru_RU.UTF-8 [builder@localhost ~]$ TESTVAR='Проверка' ./wxGetEnv_test Test string: "". [builder@localhost ~]$ LD_PRELOAD=./libwx_baseu-3.0.so TESTVAR='Проверка' ./wxGetEnv_test Test string: "Проверка". В последнем случае через LD_PRELOAD подгружается исправленная библиотека. Результат проверки актуальности Состояние: p10: wxGTK3.0 3.0.5.1. Sisyphus: wxGTK3.0 3.0.5.1-alt8 и wxGTK3.2 3.2.11, wxGetEnv всё ещё *value = p без отдельного UTF-8 фикса. Рекомендация: ретест на Sisyphus (kicad и путь с кириллицей) Sisyphus x86_64 (обновлён 2026-09-16), libwxGTK3.2-devel-3.2.11-alt1 / libwxBase3.2-3.2.11-alt1 (wxGTK3.0 в Sisyphus без -devel, собрать против него уже нельзя; kicad-10.0.6-alt2 собран с 3.2) — перевожу компонент на wxGTK3.2. Программа из вложения 10260 без изменений, g++ ... $(wx-config --cxxflags --libs base): $ env -i LANG=ru_RU.UTF-8 TESTVAR='Проверка' ./wxGetEnv_test Test string: "". $ env -i LANG=C.UTF-8 TESTVAR='Проверка' ./wxGetEnv_test Test string: "". Та же программа с setlocale(LC_ALL, "") в начале main() — или wxAppConsole + wxUILocale::UseDefault(): Test string: "Проверка". Причина та, что в отчёте: в 3.2.11 wxGetEnv() по-прежнему делает `*value = p` (src/unix/utilsunx.cpp:1431), т.е. конвертирует через wxConvLibc = mbsrtowcs() в текущей локали процесса; wx с 2.9.5 сам setlocale() не вызывает (docs/changes_30.txt), поэтому без wxLocale/wxApp::SetCLocale() процесс сидит в "C" и любая не-ASCII переменная превращается в пустую строку. В апстриме исправлено в wxWidgets 3.3.0: PR #25101 «Use UTF-8 for environment variables» (https://github.com/wxWidgets/wxWidgets/pull/25101, коммит 3ebcfe25c317, 2025-01-24) — wxGetEnv/wxSetEnv/wxGetenv перешли на wxConvWhateverWorks (UTF-8, затем локаль). В 3.2.x не бэкпортировано, wxGTK3.3 в Sisyphus нет. Перевешиваю на сопровождающего wxGTK3.2: кандидат на бэкпорт PR #25101 в wxGTK3.2 (3 файла, без изменения ABI). wxGTK3.2-3.2.11-alt2 -> sisyphus: Wed Sep 16 2026 Anton Midyukov <antohami@altlinux> 3.2.11-alt2 - Add upstream fixes from 3.3 version (Closes: 41885): + Use UTF-8 for environment variables. + Use UTF-8 in wxGetenv() overload for wide strings too. |

Description
manowar@altlinux.org 2022-02-08 01:00:39 MSK