<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>41885</bug_id>
          
          <creation_ts>2022-02-08 01:00:39 +0300</creation_ts>
          <short_desc>wxGetEnv не работает с UTF-8</short_desc>
          <delta_ts>2026-09-17 06:55:38 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>wxGTK3.2</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="manowar@altlinux.org">manowar</reporter>
          <assigned_to name="Антон Мидюков">antohami</assigned_to>
          <cc>antohami</cc>
    
    <cc>manowar</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>207532</commentid>
    <comment_count>0</comment_count>
      <attachid>10259</attachid>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2022-02-08 01:00:39 +0300</bug_when>
    <thetext>Created attachment 10259
Исправление с зашитым UTF-8

При работе с KiCAD столкнулся с тем, что библиотеки проекта не находятся, если путь до проекта содержит русские буквы. Библиотеки проекта ищутся относительно переменной окружения KIPRJMOD. И оказалось, что если там есть что-то кроме ASCII, то wxGetEnv() возвращает пустую строку.

Насколько я понимаю, проблема там на стр. 1330 модуля utilsunx.cpp (http://git.altlinux.org/gears/w/wxGTK3.0.git?p=wxGTK3.0.git;a=blob;f=src/unix/utilsunx.cpp;h=b9664094228d2deb1a7a00709dfac073734c8bfc;hb=3274364fc9016f31e61c8fd489fcb7a8ac9e33d9#l1330):

1321 bool wxGetEnv(const wxString&amp; var, wxString *value)
1322 {
1323     // wxGetenv is defined as getenv()
1324     char *p = wxGetenv(var);
1325     if ( !p )
1326         return false;
1327 
1328     if ( value )
1329     {
1330         *value = p;
1331     }
1332 
1333     return true;
1334 }

Здесь char* присваивается wxString*. Магия C++, конечно, создаёт объект, но о кодировке она ничего не знает. И в результате из непустой char* получаем пустую wxString.

Исправление, на первый взгляд, кажется тривиальным (прикладываю) — но только, если забыть о том, что кроме UTF-8 существуют и другие кодировки.

P.S. Завожу ошибку в p10, поскольку проверял на нём. Но похоже, что эта проблема должна быть и в Сизифе, и на wxGTK3.1. Потому что везде один и тот же код. Хотя, возможно, отличаются конструкторы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207533</commentid>
    <comment_count>1</comment_count>
      <attachid>10260</attachid>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2022-02-08 01:02:28 +0300</bug_when>
    <thetext>Created attachment 10260
Программа для проверки</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207534</commentid>
    <comment_count>2</comment_count>
    <who name="manowar@altlinux.org">manowar</who>
    <bug_when>2022-02-08 01:04:07 +0300</bug_when>
    <thetext>Прикладываю прогу, которой проверял:

[builder@localhost ~]$ echo $LANG
ru_RU.UTF-8

[builder@localhost ~]$ TESTVAR=&apos;Проверка&apos; ./wxGetEnv_test 
Test string: &quot;&quot;.

[builder@localhost ~]$ LD_PRELOAD=./libwx_baseu-3.0.so TESTVAR=&apos;Проверка&apos; ./wxGetEnv_test 
Test string: &quot;Проверка&quot;.

В последнем случае через LD_PRELOAD подгружается исправленная библиотека.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298002</commentid>
    <comment_count>3</comment_count>
    <who name="Vera Blagoveschenskaya">vercha</who>
    <bug_when>2026-09-11 11:47:03 +0300</bug_when>
    <thetext>Результат проверки актуальности

Состояние:
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 и путь с кириллицей)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299228</commentid>
    <comment_count>4</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2026-09-16 20:51:15 +0300</bug_when>
    <thetext>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=&apos;Проверка&apos; ./wxGetEnv_test
  Test string: &quot;&quot;.
  $ env -i LANG=C.UTF-8 TESTVAR=&apos;Проверка&apos; ./wxGetEnv_test
  Test string: &quot;&quot;.
Та же программа с setlocale(LC_ALL, &quot;&quot;) в начале main() — или wxAppConsole + wxUILocale::UseDefault():
  Test string: &quot;Проверка&quot;.

Причина та, что в отчёте: в 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() процесс сидит в &quot;C&quot; и любая не-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).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299275</commentid>
    <comment_count>5</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2026-09-17 06:55:38 +0300</bug_when>
    <thetext>wxGTK3.2-3.2.11-alt2 -&gt; sisyphus:

Wed Sep 16 2026 Anton Midyukov &lt;antohami@altlinux&gt; 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.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10259</attachid>
            <date>2022-02-08 01:00:39 +0300</date>
            <delta_ts>2022-02-08 01:00:39 +0300</delta_ts>
            <desc>Исправление с зашитым UTF-8</desc>
            <filename>wxGTK-3.0.5.1-wxGetEnv-UTF-8.patch</filename>
            <type>text/plain</type>
            <size>341</size>
            <attacher name="manowar@altlinux.org">manowar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy91bml4L3V0aWxzdW54LmNwcCBiL3NyYy91bml4L3V0aWxzdW54LmNw
cAppbmRleCBiOTY2NDA5NDIyLi43N2I1YTA4MTAzIDEwMDY0NAotLS0gYS9zcmMvdW5peC91dGls
c3VueC5jcHAKKysrIGIvc3JjL3VuaXgvdXRpbHN1bnguY3BwCkBAIC0xMzI3LDcgKzEzMjcsNyBA
QCBib29sIHd4R2V0RW52KGNvbnN0IHd4U3RyaW5nJiB2YXIsIHd4U3RyaW5nICp2YWx1ZSkKIAog
ICAgIGlmICggdmFsdWUgKQogICAgIHsKLSAgICAgICAgKnZhbHVlID0gcDsKKyAgICAgICAgKnZh
bHVlID0gd3hTdHJpbmc6OkZyb21VVEY4KHApOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10260</attachid>
            <date>2022-02-08 01:02:28 +0300</date>
            <delta_ts>2022-02-08 01:02:28 +0300</delta_ts>
            <desc>Программа для проверки</desc>
            <filename>wxGetEnv_test.cpp</filename>
            <type>text/x-c++src</type>
            <size>202</size>
            <attacher name="manowar@altlinux.org">manowar</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgPHd4L3V0aWxzLmg+CgppbnQgbWFpbigpIHsKCXd4U3RyaW5nIHN0cjsKCWlmICgg
d3hHZXRFbnYoICJURVNUVkFSIiwgJnN0ciApICkgewoJCXByaW50ZigiVGVzdCBzdHJpbmc6IFwi
JXNcIi5cbiIsIChjb25zdCBjaGFyKikgc3RyLm1iX3N0cih3eENvbnZVVEY4KSk7CgkJcmV0dXJu
IDA7Cgl9IGVsc2UgewoJCXJldHVybiAxOwoJfQp9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>