View Issue Details

IDProjectCategoryView StatusLast Update
0000750Far ManagerSettingspublic2009-04-03 01:08
Reporteralexeypa Assigned Toalexy  
PrioritynormalSeveritycrashReproducibilityalways
Status closedResolutionfixed 
Fixed in Version2.0 
Summary0000750: Неинициализированная переменная 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 я еще не разобрался, но для этой переменной актуальна та же проблема.
TagsNo tags attached.
Build845

Activities

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 ====
strInitedLanguage.patch (3,222 bytes)   

vskirdin

2009-02-20 09:53

administrator   bugnote:0002544

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;

alexeypa

2009-02-20 16:51

reporter   bugnote:0002554

> 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;

alexy

2009-03-29 22:45

administrator   bugnote:0002853

845

Issue History

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