View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000750 | Far Manager | Settings | public | 2009-02-20 07:06 | 2009-04-03 01:08 |
Reporter | alexeypa | Assigned To | alexy | ||
Priority | normal | Severity | crash | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 2.0 | ||||
Summary | 0000750: Неинициализированная переменная strInitedLanguage приводит к падению Far | ||||
Description | Массив CFG, объявленный в config.cpp ссылается на две переменные strInitedLanguage и strPersonalPluginsPath, значение которых может быть неопределено на момент инициализации CFG: {1, REG_SZ, NKeyLanguage,L"Main",&Opt.strLanguage, 0, strInitedLanguage}, {1, REG_SZ, NKeySystem,L"PersonalPluginsPath",&Opt.LoadPlug.strPersonalPluginsPath, 0, strPersonalPluginsPath}, //BUGBUG Это приводит к падению Фара, в случае если соответствующая опция отсутствует в реестре и вместо него подставляется одно из значенй выше. В моем случае это воспроизводится всегда (сборка Unicode Far x64). При этом strInitedLanguage сюдя по коду вообще ничего не делает - просто еще одна копия Opt.strLanguage. Приаттаченый патч исправляет это. Поправьте, если неправ. Как именно используется strPersonalPluginsPath я еще не разобрался, но для этой переменной актуальна та же проблема. | ||||
Tags | No tags attached. | ||||
Build | 845 | ||||
2009-02-20 07:06
|
strInitedLanguage.patch (3,222 bytes)
==== Patch <strInitedLanguage> level 1 Source: [No source] Target: 72235d2c-c60c-0410-a47a-a0032694dc5d:/trunk/unicode_far:2580 (http://farmanager.com/svn/trunk) Log: strInitedLanguage is not working and can cause an AV. === config.cpp ================================================================== --- config.cpp (revision 2580) +++ config.cpp (patch strInitedLanguage level 1) @@ -60,7 +60,6 @@ string strPersonalPluginsPath; string strKeyNameConsoleDetachKey; -string strInitedLanguage; static const wchar_t szCtrlShiftX[]=L"CtrlShiftX"; static const wchar_t szCtrlDot[]=L"Ctrl."; static const wchar_t szCtrlShiftDot[]=L"CtrlShift."; @@ -1117,7 +1116,7 @@ {0, REG_DWORD, NKeyHelp,L"ActivateURL",&Opt.HelpURLRules,1, 0}, - {1, REG_SZ, NKeyLanguage,L"Main",&Opt.strLanguage, 0, strInitedLanguage}, + {1, REG_SZ, NKeyLanguage,L"Main",&Opt.strLanguage, 0, L"English"}, {1, REG_SZ, NKeyLanguage,L"Help",&Opt.strHelpLanguage, 0, L"English"}, {1, REG_DWORD, NKeyConfirmations,L"Copy",&Opt.Confirm.Copy,1, 0}, @@ -1243,10 +1242,6 @@ /* <������������> *************************************************** */ - // ��� ����� ����� ������������� - if(StrCmpI(Opt.strLanguage,strInitedLanguage)) - Opt.strLanguage=strInitedLanguage; - GetRegKey(NKeyConfirmations,L"EscTwiceToInterrupt",Opt.Confirm.EscTwiceToInterrupt,0); if(Opt.PluginMaxReadData < 0x1000) // || Opt.PluginMaxReadData > 0x80000) === global.hpp ================================================================== --- global.hpp (revision 2580) +++ global.hpp (patch strInitedLanguage level 1) @@ -87,7 +87,6 @@ extern wchar_t RegColorsHighlight[]; extern BOOL LanguageLoaded; -extern string strInitedLanguage; extern BOOL NotUseCAS; extern BOOL IsProcessAssignMacroKey; === main.cpp ================================================================== --- main.cpp (revision 2580) +++ main.cpp (patch strInitedLanguage level 1) @@ -564,7 +564,6 @@ WaitKey(); // � ����� �� ������ ������??? ����� exit(0); } - strInitedLanguage=Opt.strLanguage; SetEnvironmentVariableW(L"FARLANG",Opt.strLanguage); SetHighlighting(); ==== BEGIN SVK PATCH BLOCK ==== Version: svk v2.0.99_01 (MSWin32) eJx9k89P1EAUxxs9qSdPHN2Q4cbC/Gw7a7JZD5AYidGIXDxsXmem3YYy3bSzKyRzIcDFoBE9cPLE P8F/4r/jbBcSRULSJn2Z7/u873udt93svhwRPxxijwj2H/beDAbvwKnJWohQ7I0uXd0g4SszNxVi vqoLxL2FAxNOHTSFccMhCcnpMnmrS7iF8AUjA1fbFskONnaNMYh4PhJ+xBbPGBHpWxNOOtq4MfOy LWsbiiUJD4KgJiG7nho7burahfpUpHhEF6nYq6puzXjBHnEfqEFOb+V5WZlOU9u8LDbUdNrBbgCd lt3VFlWdQbUxuUfL/9Gm/gBKexfaNSRuXOmyMSrM42ihCIYDpjuF6bQ6Gjtz6LSpHHSWGfUKjBRC ZopQyFIiCRN5riCHRBqGuUQ8DlN+G0Wn31dOv81WnkYXz6Po5PzxxfqX6Hp88msUXR+e/H6xs7pl i6psJ6thJH8NadnishZWSlKlFVUUcAoxhxQkcI1TTLRIxINu2YKQcpIyQRUIQU1MVS4EI0yDSI3K tCaI4qXbq+0r9CSKLh9F0fnqJbrXU0cMbULCZCYzhjMSa5phDQx4GIjEcU4f9MS7rlKeCiEM1zFA zJjAVGBIU+BCCaVSRPnS0/HP6PjHp2fh42w9ir5uHp+9v9dXR020SXRiqJKgcypjITkwJkWucp4x orv/L5hvXfPals7oHbDFDArTK9uerV3vc93sl7bogdU9BTa8s9aEqPdqbwOR5P/E4ZB6ROlyp3a7 xRgMPtpybpoWqrXYh+s2BTcJSxL2JQSzWakXS7jpmpnd35zZUtU6dAHNzcVELPYJpUxoqvoqxqqP OcF94An0AWNGY8m1EvoPvgVLIQ== ==== END SVK PATCH BLOCK ==== |
|
main.cpp InitConsole(); > GetRegKey(L"Language",L"Main",Opt.strLanguage,L"English"); ... strInitedLanguage=Opt.strLanguage; SetEnvironmentVariableW(L"FARLANG",Opt.strLanguage); ReadConfig() вызывается позже в конструкторе ControlObject`а после куска выше. wmain_sehed() ==> MainProcess() ==> ControlObject CtrlObj; |
|
> ReadConfig() вызывается позже в конструкторе ControlObject`а после куска выше. > wmain_sehed() ==> MainProcess() ==> ControlObject CtrlObj; Правильно, но и wmain и ReadConfig делают одно и тоже: wmain: // читаем Language/Main в Opt.strLanguage GetRegKey(L"Language",L"Main",Opt.strLanguage,L"English"); // и делаем копию в strInitedLanguage strInitedLanguage=Opt.strLanguage; ReadConfig: // Объявляем, что Language/Main будет прочитан в Opt.strLanguage, значение // по-умолчанию - strInitedLanguage, т.е. уже прочитанное значение или // "English" {1, REG_SZ, NKeyLanguage,L"Main",&Opt.strLanguage, 0, strInitedLanguage}, // Читаем тоже самое значение, что и wmain, и используем прочитанное в // wmain как значение по-умолчанию GetRegKey(CFG[I].KeyName, CFG[I].ValName,*(string *)CFG[I].ValPtr,CFG[I].DefStr); // Синхронизируем два значения. if(StrCmpI(Opt.strLanguage,strInitedLanguage)) Opt.strLanguage=strInitedLanguage; |
|
845 |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-02-20 07:06 | alexeypa | New Issue | |
2009-02-20 07:06 | alexeypa | File Added: strInitedLanguage.patch | |
2009-02-20 09:53 | vskirdin | Note Added: 0002544 | |
2009-02-20 16:51 | alexeypa | Note Added: 0002554 | |
2009-03-29 18:26 | alexy | Status | new => assigned |
2009-03-29 18:26 | alexy | Assigned To | => alexy |
2009-03-29 22:45 | alexy | Note Added: 0002853 | |
2009-03-29 22:45 | alexy | Status | assigned => feedback |
2009-04-03 01:08 | alexy | Build | => 845 |
2009-04-03 01:08 | alexy | Status | feedback => closed |
2009-04-03 01:08 | alexy | Resolution | open => fixed |
2009-04-03 01:08 | alexy | Fixed in Version | => 2.0 |