View Issue Details

IDProjectCategoryView StatusLast Update
0001025Far ManagerCopy/Movepublic2009-09-01 08:46
ReporterVictor Miasnikov Assigned Tozg  
PrioritynormalSeveritycrashReproducibilityalways
Status closedResolutionfixed 
Product Version2.0 
Fixed in Version2.0 
Summary0001025: FAR v2.0.1091 ( и v2.0.981) обрезает записи в descript.ion при F5 или F6 до 260 символов
Descriptionv2 обрезает записи в descript.ion при F5 или F6 до 260 char
 <=>
FAR v2.0.1091 ( и v2.0.981) обрезает записи в descript.ion при F5 или F6 до 260 символов

 До:
reatogo_autoDriver-BETA.zip Apr-09-05 100 autoDriver for disk and network drivers <Beta for testing>Download Automatically creates the driver plugins for disk controllers and network cards, not natively supported by XPE. НТТР://www.reatogo.de/BartPE/FEATURES/autoHelp_for_plugins.htm#plugins [НТТР://www.reatogo.de/Download/autoHelp/reatogo_autoDriver-BETA.zip]
 После:
Display.cab WinPE-- Display is a small utility that works as a GUI for setres.exe. Display also supports the changing of wallpaper. НТТР://www.patrick-binnendijk.nl/index.php?c=pe НТТР://www.patrick-binnendijk.nl/files/pe/Display.htm [НТТР://www.patrick-binnendijk.nl/fil
Additional Information По словам автора ( из скромности не хочет себя рекламировать) "не идеальный, но менее радикальный, чем правка внутри метода .Format"

--- dizlist.cpp Thu Aug 27 15:35:09 2009
+++ Fixed\dizlist.cpp Fri Aug 28 09:55:13 2009
@@ -464,7 +464,7 @@
   while (IsSpace(DizData[DizPos].DizText[TextPos]))
     TextPos++;

- string strDizText, strQuotedName;
+ string strQuotedName;

   strQuotedName = DestName;
   QuoteSpaceOnly(strQuotedName);
@@ -474,9 +474,14 @@
   if(!OptDizStartPos || OptDizStartPos < LenQuotedName)
     OptDizStartPos=(int)strQuotedName.GetLength();

- strDizText.Format (L"%-*.*s %.*s",
- OptDizStartPos,OptDizStartPos,(const wchar_t*)strQuotedName,
- NM/*(sizeof(DizText)-OptDizStartPos-2)*/,&DizData[DizPos].DizText[TextPos]); //BUGBUG
+ int Size = OptDizStartPos + StrLength(&DizData[DizPos].DizText[TextPos]) + 2;
+ string strDizText(Size);
+ _swprintf((wchar_t *)(const wchar_t *)strDizText, L"%s %s",
+ (const wchar_t*)strQuotedName, (const wchar_t*)&DizData[DizPos].DizText[TextPos]);
+
+ //strDizText.Format (L"%-*.*s %.*s",
+ // OptDizStartPos,OptDizStartPos,(const wchar_t*)strQuotedName,
+ // NM/*(sizeof(DizText)-OptDizStartPos-2)*/,&DizData[DizPos].DizText[TextPos]); //BUGBUG

   DestDiz->AddDiz(DestName,DestShortName,strDizText);
   while (++DizPos<DizCount)

  Радикальный метод:
"внутри метода .Format используется буфер длинной всего 512 символов", не стоит ли его в 3-100 раз увеличить?
TagsNo tags attached.
Build1100

Activities

Victor Miasnikov

2009-08-28 13:38

reporter   bugnote:0003972

See
http://forum.farmanager.com/viewforum.php?f=9

zg

2009-08-28 13:41

developer   bugnote:0003973

> Радикальный метод: "внутри метода .Format используется буфер длинной всего 512 символов", не стоит ли его в 3-100 раз увеличить?

ткните пальцем. я там вижу исключительно динамический буфер.

Victor Miasnikov

2009-08-28 13:55

reporter   bugnote:0003974

Last edited: 2009-08-28 14:18

Sorry, сразу не доглядел -- судя по всему Zd предлагает свой вариант исправления проблемы:

===
--- dizlist.cpp (revision 3348)
+++ dizlist.cpp (working copy)
- strDizText.Format (L"%-*.*s %.*s",
- OptDizStartPos,OptDizStartPos,(const wchar_t*)strQuotedName,
- NM/*(sizeof(DizText)-OptDizStartPos-2)*/,&DizData[DizPos].DizText[TextPos]); //BUGBUG
+ strDizText.Format (L"%-*.*s %s",
+ OptDizStartPos,OptDizStartPos,(const wchar_t*)strQuotedName,&DizData[DizPos].DizText[TextPos]); //BUGBUG
===

IMHO, он тоже решит проблему

2009-08-28 15-16:
Zg извините за все чем я, хотя бы потенциально, Вас обидел, я этого не хотел ни в малейшей степени

zg

2009-08-28 14:13

developer   bugnote:0003975

очень смешно мне мой же патч постить.

ps: 1093.

Victor Miasnikov

2009-08-28 15:57

reporter   bugnote:0003979

Last edited: 2009-08-28 17:05

Сегодня уже не успею организовать компиляцию из Src :-(
 =>
До понедельника!

2009-08-28 18-06
NightRoman - спасибо за проверку

NightRoman

2009-08-28 16:42

reporter   bugnote:0003983

попробовал 1093 - уже гораздо лучше, спасибо большое.

тем не менее, большой тестовый текст описания таки подрезался до 8000 с чем-то байт. может это и нормально (куда такие описания нафиг?), но...

Victor Miasnikov

2009-08-28 17:03

reporter   bugnote:0003984

Ошибка не закрыта!

Хотя уже просто minor, а не 100% "приводящая к потере данных"

8000 -- это все равно потолок.

 Эх, спишу на вечер пятницы Ж-):
А кто-то говорил "динамически", "на весь объем RAM"

zg

2009-08-28 19:11

developer   bugnote:0003985

> А кто-то говорил "динамически", "на весь объем RAM"
в UnicodeString::Format он динамический. продолжать разговор имеет смысл после осознания вами этого факта.

alexy

2009-08-28 19:15

administrator   bugnote:0003986

Товарищ VVG это вы что ли? А ну кыш.

Victor Miasnikov

2009-08-31 06:52

reporter   bugnote:0003993

Last edited: 2009-08-31 09:15

TO Alexy: Я -- В.В.М.

TO ZG: То что в подпрограмме X он динамический я "осознал"

 Пошел качать новый build

 Скоро узнаем динамический ли он в месте Y и Z

Подтверждаю NightRoman: v2.0 build 1098 обрезает до 8182
 
 Пошел осваивать VS 2008
Еще не освоил, но вот что мне нашли:


#define MAX_DIZ_LENGTH  8192



    FILE *DizFile;

    if ((DizFile=_wfopen(strDizFileName,L"rb"))!=NULL)

    {

      string strDizText;

      char DizText[MAX_DIZ_LENGTH]; //BUGBUG

 Но сказали, что грубым образом увеличивать MAX_DIZ_LENGTH опасно:
можно нарваться на stack overflow

Victor Miasnikov

2009-08-31 10:03

reporter   bugnote:0003996

Last edited: 2009-08-31 11:00

Не стоит ли:
 1) закрыть даннный Issue со статусом crash
 2) открыть новый со статусом minor про потолок 8192
?
Какие здесь традиции на этот счет?

 Оказалось, что так ведет себя не только v2.X :
FAR v2.0.1098 ( и v1.75.2582, и v1.7.5.1634) обрезает записи в descript.ion при F5 или F6 до 8192 символов

igor_yudincev

2009-08-31 17:53

reporter  

diz.patch (2,028 bytes)   
Index: dizlist.cpp
===================================================================
--- dizlist.cpp	(revision 3412)
+++ dizlist.cpp	(working copy)
@@ -50,8 +50,6 @@
 static int _cdecl SortDizIndex(const void *el1,const void *el2);
 int _cdecl SortDizSearch(const void *key,const void *elem);
 
-#define MAX_DIZ_LENGTH  8192
-
 static DizRecord *SearchDizData;
 
 DizList::DizList()
@@ -120,28 +118,35 @@
     FILE *DizFile;
     if ((DizFile=_wfopen(strDizFileName,L"rb"))!=NULL)
     {
-      string strDizText;
-      char DizText[MAX_DIZ_LENGTH]; //BUGBUG
-      //SaveScreen *SaveScr=NULL;
-      clock_t StartTime=clock();
+      fseek(DizFile,0,SEEK_END);
+      int szDizText=ftell(DizFile);
+      if (szDizText>0)
+      {
+        string strDizText;
+        char *pDizText=new char[szDizText+1];
+        //SaveScreen *SaveScr=NULL;
+        clock_t StartTime=clock();
+        rewind(DizFile);
 
-      while (fgets(DizText,sizeof(DizText),DizFile)!=NULL)
-      {
-        if ((DizCount & 127)==0 && clock()-StartTime>1000)
+        while (fgets(pDizText,szDizText+1,DizFile)!=NULL)
         {
-          //if (SaveScr==NULL)
+          if ((DizCount & 127)==0 && clock()-StartTime>1000)
           {
-            //SaveScr=new SaveScreen;
-            SetCursorType(FALSE,0);
-            PR_ReadingMsg();
+            //if (SaveScr==NULL)
+            {
+              //SaveScr=new SaveScreen;
+              SetCursorType(FALSE,0);
+              PR_ReadingMsg();
+            }
+            if (CheckForEsc())
+              break;
           }
-          if (CheckForEsc())
-            break;
+
+          strDizText.SetData (pDizText, CP_OEMCP); //BUGBUG
+          RemoveTrailingSpaces(strDizText);
+          AddRecord(strDizText);
         }
-
-        strDizText.SetData (DizText, CP_OEMCP); //BUGBUG
-        RemoveTrailingSpaces(strDizText);
-        AddRecord(strDizText);
+        delete[] pDizText;
       }
 
       Modified=0;
diz.patch (2,028 bytes)   

igor_yudincev

2009-08-31 17:54

reporter   bugnote:0003999

Продублировал патч с форума.

alexy

2009-08-31 20:39

administrator   bugnote:0004001

1100

Victor Miasnikov

2009-09-01 08:18

reporter   bugnote:0004002

Приятно обрадован

Большое спасибо!

Issue History

Date Modified Username Field Change
2009-08-28 13:37 Victor Miasnikov New Issue
2009-08-28 13:38 Victor Miasnikov Note Added: 0003972
2009-08-28 13:41 zg Note Added: 0003973
2009-08-28 13:42 zg Status new => assigned
2009-08-28 13:42 zg Assigned To => zg
2009-08-28 13:55 Victor Miasnikov Note Added: 0003974
2009-08-28 13:56 Victor Miasnikov Note Edited: 0003974
2009-08-28 14:13 zg Note Added: 0003975
2009-08-28 14:18 Victor Miasnikov Note Edited: 0003974
2009-08-28 14:18 Victor Miasnikov Note Edited: 0003974
2009-08-28 15:57 Victor Miasnikov Note Added: 0003979
2009-08-28 16:42 NightRoman Note Added: 0003983
2009-08-28 17:03 Victor Miasnikov Note Added: 0003984
2009-08-28 17:05 Victor Miasnikov Note Edited: 0003979
2009-08-28 19:11 zg Note Added: 0003985
2009-08-28 19:15 alexy Note Added: 0003986
2009-08-31 06:52 Victor Miasnikov Note Added: 0003993
2009-08-31 06:52 Victor Miasnikov Note Edited: 0003993
2009-08-31 07:38 Victor Miasnikov Note Edited: 0003993
2009-08-31 09:14 Victor Miasnikov Note Edited: 0003993
2009-08-31 09:15 Victor Miasnikov Note Edited: 0003993
2009-08-31 10:03 Victor Miasnikov Note Added: 0003996
2009-08-31 11:00 Victor Miasnikov Note Edited: 0003996
2009-08-31 17:53 igor_yudincev File Added: diz.patch
2009-08-31 17:54 igor_yudincev Note Added: 0003999
2009-08-31 20:39 alexy Note Added: 0004001
2009-08-31 20:39 alexy Status assigned => feedback
2009-09-01 08:18 Victor Miasnikov Note Added: 0004002
2009-09-01 08:18 Victor Miasnikov Status feedback => resolved
2009-09-01 08:18 Victor Miasnikov Resolution open => fixed
2009-09-01 08:46 alexy Build => 1100
2009-09-01 08:46 alexy Status resolved => closed
2009-09-01 08:46 alexy Fixed in Version => 2.0