Microsoft Windowsç°å¢ã§æã人æ°ã®ãããã¡ã€ã«ãããŒãžã£ãŒã®1ã€ã¯ãDOSçšã«äœæãããNorton CommanderãåŒãç¶ãã Far Managerã§ãã Far Managerã¯ããã¡ã€ã«ã·ã¹ãã ã®æäœïŒãã¡ã€ã«ã®äœæãç·šéã衚瀺ãã³ããŒãç§»åãæ€çŽ¢ãåé€ïŒã容æã«ããæšæºæ©èœïŒãããã¯ãŒã¯ãã¢ãŒã«ã€ããããã¯ã¢ãããªã©ã®æäœïŒãæ¡åŒµããŸãã æè¿ãFar Managerã®Linuxãžã®ç§»æ€ãè¡ããããããŸã§ã«ã¢ã«ãã¡çããªãªãŒã¹ãããŸããã PVS-StudioããŒã ã¯ãã®ã€ãã³ããç¡èŠã§ããªãã£ããããé©åã³ãŒãã®å質ã確èªããããšã«ããŸããã
Far Managerã«ã€ããŠ
Far Manager-Microsoft Windowsãã¡ããªãŒã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã çšã®ã³ã³ãœãŒã«ãã¡ã€ã«ãããŒãžã£ãŒã§ãããŒããŒãã®æäœã«çŠç¹ãåœãŠãŠããŸãã FAR Managerã¯ã2ã€ã®ãŠã£ã³ããŠã®ã€ããªãã®ãŒãæšæºïŒããã©ã«ãïŒã«ã©ãŒãªã³ã°ãããã³ã³ãã³ãã·ã¹ãã ïŒããŒããŒãã³ã³ãããŒã«ïŒãæåãªãã¡ã€ã«ãããŒãžã£ãŒNorton Commanderããç¶æ¿ãããã¡ã€ã«ã®æäœïŒãã¡ã€ã«ãšãã£ã¬ã¯ããªã®äœæã衚瀺ãç·šéãã³ããŒãååã®å€æŽãåé€ïŒã«äŸ¿å©ãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸããªã©ïŒã
å³1-Windowsäžã®Far Manager 2ïŒç»åãã¯ãªãã¯ããŠæ¡å€§ïŒããã°ã©ã ã®äœè
ã¯ãŠãŒãžã³ãã·ã£ã«ã§ãã æåã®ããŒãžã§ã³ã¯1996幎9æ10æ¥ã«ãªãªãŒã¹ãããŸããã Roshalãæãããææ°ããŒãžã§ã³ã¯ã2000幎6æ23æ¥ïŒããŒãžã§ã³1.65ïŒã«é¡ããŸãã å®éããã®ç¬éãããFAR Groupã¯FAR Managerã®éçºãéå§ããŸããã æ¬¡ã®ãªãªãŒã¹v1.70ã¯ã2006幎3æ29æ¥ã«ããã®ãŒããŸãã 2008幎12æ13æ¥ãããŒãžã§ã³2.0ããªãªãŒã¹ãããããã°ã©ã ã¯ç¡æïŒãªãŒãã³ãœãŒã¹ïŒã«ãªããä¿®æ£BSDã©ã€ã»ã³ã¹ã®äžã§é
åžãããŸããã 1.70ãã2.0ãŸã§ã®ãã¹ãŠã®FarããŒãžã§ã³ã«ã¯ãå®è³ªçã«å€éšã®éãã¯ãªããæ°ããããŒãžã§ã³ã«åãæ¿ãããšãã«ãŠãŒã¶ãŒãããã°ã©ã ããã¹ã¿ãŒããããã®è¿œå ã®äœæ¥ã¯å¿
èŠãããŸããã ããŒãžã§ã³1.80ãããUnicodeãµããŒããç»å ŽããŸããã ææ°ãªãªãŒã¹ããŒãžã§ã³ã¯ã2016幎11æ4æ¥ãã3.0ã§ãã
2016幎8æ10æ¥ã«ã
Far2lãã¡ã€ã«ãããŒãžã£ãŒïŒLinuxïŒã®æåã®ãã¹ããã«ããå
¬éãããŸããã çŸæç¹ã§ã¯ãã¢ã»ã³ããªã«ã¯çµ±åäœæ¥ç«¯æ«ãšãAlignãAutoWrapãColorerãDrawLineãEditcaseãFarFTPãFarLngãMultiArcãNetBoxãSimpleIndentãTmpPanelã®ãã©ã°ã€ã³ãå«ãŸããŠããŸãã ã³ãŒãã¯GPLv2ã®äžã§ã©ã€ã»ã³ã¹ãããŠããŸãã
å³2-Linuxäžã®Far Manager 2ïŒç»åãã¯ãªãã¯ããŠæ¡å€§ïŒèšèããè¡çºãž
Far2lãããžã§ã¯ãã®æ€èšŒåŸã1,038ä»¶ã®äžè¬çãªèŠåãåä¿¡ãããŸããã æ¬¡ã®å³ã¯ãä¿¡é Œã¬ãã«ããšã®èŠåã®ååžã瀺ããŠããŸãã
å³1-ä¿¡é Œã¬ãã«ã«ããèŠåã®ååžïŒéèŠåºŠïŒä»¥äžã®å³ã«ã€ããŠç°¡åã«ã³ã¡ã³ãããŸãããã153ã®é«ã¬ãã«ã®èŠåã336ã®äžã¬ãã«ã®èŠåã549ã®äœã¬ãã«ã®èŠåãåä¿¡ãããŸããã
ããªãã®æ°ã®èŠåã«ããããããããã¹ãŠã®èŠåãæ¬åœã®ééãã§ã¯ãªãããšãèŠããŠãã䟡å€ããããŸãã é«ã¬ãã«ããã³äžã¬ãã«ã®èŠåã®ã¿ãå«ãã¬ããŒãã確èªããåŸã250ä»¶ã®ã±ãŒã¹ã匷調衚瀺ããŸãããããã¯ãæ¬åœã®ãšã©ãŒã§ããå¯èœæ§ãé«ãã§ãã
é«ã¬ãã«ãšäžã¬ãã«ãéžæãããšã誀æ€ç¥ã®å²åã¯çŽ49ïŒ
ã§ããã èšãæããã°ã1ç§ããã®èŠåã¯ã³ãŒãã®æ¬ é¥ãç¹å®ããŸãã
ããã§ãPVS-Studioã¢ãã©ã€ã¶ãŒã«ãã£ãŠæ€åºãããå®éã®ãšã©ãŒã®çžå¯Ÿå¯åºŠã決å®ããŸãã ãœãŒã¹ã³ãŒãïŒSLOCïŒã®åèšè¡æ°ã¯538675ã§ãããããã£ãŠãå¯åºŠã¯ã³ãŒã1000è¡ããã0.464ãšã©ãŒã«çãããªããŸãã ãã€ããããã®æ°å€ãåéããããŸããŸãªãããžã§ã¯ãã®ã³ãŒãã®å質ã«é¢ããäžè¬çãªèšäºãæžããŸãã
ãã®ã€ã³ãžã±ãŒã¿ã¯ãããžã§ã¯ãå
šäœã®åèšãšã©ãŒå¯åºŠã瀺ããŠããªãããšã¯æ³šç®ã«å€ããŸã-倧ããïŒã¢ãã©ã€ã¶ãŒãå®éã®ãšã©ãŒã§åäœããªãã£ãïŒããå°ããïŒã¢ãã©ã€ã¶ãŒãæ£ããã³ãŒãã§åäœããïŒããšããããŸãã ååãšããŠãä»ã®ãããžã§ã¯ãã§ã¯
ãæ€åºããããšã©ãŒã®å¯åºŠãé«ããªããŸãã ã³ãŒãå質ã®èгç¹ãããç§»æ€ã¯æåãããšèšããŸãã ãã ããèŠã€ãã£ããšã©ãŒã¯ç¡å®³ã§ã¯ãªããããä¿®æ£ããããšã匷ããå§ãããŸãã
æ€èšŒçµæ
èªã¿ãããããããã«ãã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ãããããšãäºåã«èŠåããŸãã ãŸãããã®èšäºã«ã¯æ€èšŒäžã«èŠã€ãã£ããã¹ãŠã®ãšã©ãŒãå«ãŸããŠããããã§ã¯ãªããæãè峿·±ããšã©ãŒã®ã¿ãå«ãŸããŠããŸãã
ã³ããŒããŒã¹ã
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V501 ã||ãã®å·ŠåŽãšå³åŽã«åäžã®å¯æ¬¡åŒãKey == MCODE_F_BM_GETãããããŸã æŒç®åã macro.cpp 4819
int KeyMacro::GetKey() { .... DWORD Key = !MR ? MCODE_OP_EXIT : GetOpCode(MR, Work.ExecLIBPos++); .... switch (Key) { .... case MCODE_F_BM_POP: { TVar p1, p2; if (Key == MCODE_F_BM_GET) VMStack.Pop(p2); if ( Key == MCODE_F_BM_GET
Key倿°ã¯ã宿°
MCODE_F_BM_GETãš2忝èŒãããŸããã ããã¯ããããã¿ã€ããã¹ã§ããã
Keyã¯ä»ã®å®æ°ãšæ¯èŒãããã¹ãã§ããã ã¢ãã©ã€ã¶ãŒã¯ãããã«3ã€ã®é¡äŒŒããå ŽæãèŠã€ããŸããã
- V501 '||'ã®å·Šå³ã«åäžã®å¯æ¬¡åŒ 'ïŒStrCmpNïŒCurStrãL "ïŒ/"ã2ïŒ'ããããŸãã æŒç®åã fnparce.cpp 291
- V501ã||ãã®å·Šãšå³ã«åäžã®å¯æ¬¡åŒãïŒStrCmpNïŒCurStrãL "ïŒ= /"ã3ïŒãããããŸãã æŒç®åã fnparce.cpp 291
- V501ã|ãã®å·Šãšå³ã«åã坿¬¡åŒãKEY_RCTRLãããããŸã æŒç®åã keyboard.cpp 1830
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªïŒ267ã268ãAPIStringMap.cpp 268
static BOOL WINPORT(GetStringType)( DWORD type, LPCWSTR src, INT count, LPWORD chartype ) { .... while (count--) { int c = *src; WORD type1, type3 = 0; .... if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_FULLWIDTH;
ã©ãããã2çªç®ã®æ¡ä»¶ã¯ã³ããŒããŒã¹ãã®ååã«åŸã£ãŠèšè¿°ããããã®ã§ãæåã®æ¡ä»¶ãšãŸã£ããåãã§ãã ãã ããæå³ãããã§ããå Žåã¯ã2çªç®ã®æ¡ä»¶ãåé€ããããšã§ã³ãŒããç°¡çŽ åã§ããŸãã
.... if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_FULLWIDTH | C3_SYMBOL; ....
èŠã€ãã£ããšã©ãŒã¯ãå¯äžã®ãã®ã§ã¯ãããŸããã§ããã
- V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ272ã273ãAPIStringMap.cpp 273
- V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ274ã275ãAPIStringMap.cpp 275
- V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ6498ã6503ãmacro.cpp 6503
- V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ1800ã1810ãvmenu.cpp 1810
- V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ3353ã3355ãwrap.cppïŒ3355
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V523 ãthenãã¹ããŒãã¡ã³ãã¯ãelseãã¹ããŒãã¡ã³ããšåçã§ãã Queque.cpp 358
void FTP::AddToQueque(FAR_FIND_DATA* FileName, LPCSTR Path, BOOL Download) { .... char *m; .... if(Download) m = strrchr(FileName->cFileName, '/');
ããã§ã¯ãæ¡ä»¶ããã³ããŒ-貌ãä»ããã®ååã«åŸã£ãŠæžã蟌ãŸãããšæãããŸãã
ããŠã³ããŒãã®å€ïŒ
TRUE ã
FALSE ïŒã«é¢ä¿ãªããã/ãæåã®æåŸã®åºçŸäœçœ®ã¯
mãã€ã³ã¿ãŒã«ä¿åãããŸãã
æªå®çŸ©ã®åäœ
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V567æªå®çŸ©ã®åäœã 'Item [FocusPos]-> Selected'倿°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã dialog.cpp 3827
int Dialog::Do_ProcessSpace() { .... if (Item[FocusPos]->Flags & DIF_3STATE) (++Item[FocusPos]->Selected) %= 3;
ããã«ã¯æç¢ºãªæªå®çŸ©ã®åäœããããŸãïŒ
ã¢ã€ãã [FocusPos]->éžæããã倿°
ã¯åããã€ã³ãã§2å倿Žã
ããŸãïŒçµæã®å²ãåœãŠã§3ãæ³ãšããã€ã³ã¯ãªã¡ã³ããšé€ç®ïŒã
åæ§ã®æªå®çŸ©ã®åäœãæã€å¥ã®å ŽæãèŠã€ãããŸããïŒ
- V567æªå®çŸ©ã®åäœã ':: ViewerID'倿°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã viewer.cpp 117
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒV610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å³åŽã®ãªãã©ã³ã 'sizeofïŒwchar_tïŒ* 8'ã¯ãææ Œããå·ŠåŽã®ãªãã©ã³ãã®ãããåäœã®é·ã以äžã§ãã RegExp.cpp 4467
#define rechar wchar_t #define RE_CHAR_COUNT (1 << sizeof(rechar) * 8) int RegExp::Optimize() { .... for (op=code; ; op=op->next) { switch (OP.op) { .... case opType: { for (int i = 0; i < RE_CHAR_COUNT; i++) // <= { if (ISTYPE(i, OP.type)) { first[i]=1; } } break; } } .... } .... }
ãšã©ãŒã®æ¬è³ªã¯æ¬¡ã®ãšããã§ããLinuxã§ã¯ã
wchar_tåã®ãµã€ãºã¯4ãã€ãã§ãã ãããã£ãŠãsigned
int ïŒ4ãã€ãïŒã¯32ãããå·Šã«ã·ãããããŸãã C ++ 11æšæºã«ããã°ãå·Šã®ãªãã©ã³ãã笊å·ä»ãã®æ£ã®æ°ã§ããå ŽåãNãå·Šã®ãªãã©ã³ãã®ãããæ°ä»¥äžã®å ŽåãNãããã ãå·Šã«ã·ãããããšæªå®çŸ©ã®åäœã«ãªããŸãã æ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
#define rechar wchar_t #define RE_CHAR_COUNT (static_cast<int64_t>(1) << sizeof(rechar) * 8) int RegExp::Optimize() { .... for (int64_t i = 0; i < RE_CHAR_COUNT; i++) { .... } .... }
å·Šã«ã·ãããããšããæªå®çŸ©ã®åäœã«ã€ãªããå Žæãããã«ããã€ãèŠã€ãããŸããã
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å³åŽã®ãªãã©ã³ã 'sizeofïŒwchar_tïŒ* 8'ã¯ãææ Œããå·ŠåŽã®ãªãã©ã³ãã®ãããåäœã®é·ã以äžã§ãã RegExp.cpp 4473
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å³åŽã®ãªãã©ã³ã 'sizeofïŒwchar_tïŒ* 8'ã¯ãææ Œããå·ŠåŽã®ãªãã©ã³ãã®ãããåäœã®é·ã以äžã§ãã RegExp.cpp 4490
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å³åŽã®ãªãã©ã³ã 'sizeofïŒwchar_tïŒ* 8'ã¯ãææ Œããå·ŠåŽã®ãªãã©ã³ãã®ãããåäœã®é·ã以äžã§ãã RegExp.cpp 4537
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å³åŽã®ãªãã©ã³ã 'sizeofïŒwchar_tïŒ* 8'ã¯ãææ Œããå·ŠåŽã®ãªãã©ã³ãã®ãããåäœã®é·ã以äžã§ãã RegExp.cpp 4549
- V610æªå®çŸ©ã®åäœã ã·ããæŒç®åã<<ãã確èªããŠãã ããã å³åŽã®ãªãã©ã³ã 'sizeofïŒwchar_tïŒ* 8'ã¯ãææ Œããå·ŠåŽã®ãªãã©ã³ãã®ãããåäœã®é·ã以äžã§ãã RegExp.cpp 4561
誀ã£ãã¡ã¢ãªåŠç
ã¡ãã£ãšãããã¬ãŒãã³ã°ã§æ°ããã»ã¯ã·ã§ã³ãå§ããŸãããã èªåã§ãšã©ãŒãèŠã€ããããšããå§ãããŸãïŒãã³ãã¯
TreeItem :: SetTitle颿°ã«ãããŸã ïŒã
class UnicodeString { .... UnicodeString(const wchar_t *lpwszData) { SetEUS(); Copy(lpwszData); } .... const wchar_t *CPtr() const { return m_pData->GetData(); } operator const wchar_t *() const { return m_pData->GetData(); } .... } typedef UnicodeString FARString; struct TreeItem { FARString strName; .... } TreeItem **ListData;
void TreeList::SetTitle() { .... if (GetFocus()) { FARString strTitleDir(L"{"); const wchar_t *Ptr = ListData ? ListData[CurFile]->strName : L""; .... } .... }
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V623 ãïŒïŒãæŒç®åã®æ€æ»ãæ€èšããŠãã ããã ãUnicodeStringãã¿ã€ãã®äžæãªããžã§ã¯ããäœæããããã®åŸç Žæ£ãããŸãã 第3ãªãã©ã³ãã確èªããŠãã ããã treelist.cpp 2093
æãããªééãã§ã¯ãããŸãããïŒ çŸåšã®ã³ã³ããã¹ãã§ã¯ã倿°
ListData [CurFile]-> strNameã¯
UnicodeStringã¯ã©ã¹ã®ãªããžã§ã¯ãã§ãã
UnicodeStringã¯ã©ã¹ã§ã¯ã
constå
wchar_t *ãžã®æé»çãªå€ææŒç®å
ããªãŒããŒããŒããããŸãã æ¬¡ã«ã
TreeList :: SetTitle颿°ã®äžé
æŒç®åã«æ³šæããŠ
ãã ããã2çªç®ãš3çªç®ã®ãªãã©ã³ãã¯ç°ãªãã¿ã€ãã§ãïŒãããã
UnicodeStringãš
const char [1] ïŒã æåã®ãªãã©ã³ãã
falseãè¿ãå Žåã
Ptrãã€ã³ã¿ãŒã¯ç©ºã®æååã«ã¢ãã¬ã¹æå®ãããããšãçè§£ãããŸããã
UnicodeStringã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã¯
æç€ºçã«å®£èšãããŠããªããããå®éã«ã¯ãç©ºã®æååãå«ãäžæãªããžã§ã¯ããäœæããã
const wchar_t *ã«æé»çã«ãã£ã¹ããããŸãã ãã®åŸãäžæãªããžã§ã¯ãã¯ç Žæ£ããã
Ptrã¯ç¡å¹ãªããŒã¿ã瀺ããŸãã ä¿®æ£ãããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
.... const wchar_t *Ptr = ListData ? ListData[CurFile]->strName.CPtr() : L""; ....
次ã®ã³ãŒãã¯ã2ã€ã®èšºæãåæã«æ©èœããããšã§æ³šç®ã«å€ããŸãã
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
- V779å°éäžèœã³ãŒããæ€åºãããŸããã ãšã©ãŒãååšããå¯èœæ§ããããŸãã 7z.cpp 203
- V773 ãtããã€ã³ã¿ãŒãè§£æŸããã«é¢æ°ãçµäºããŸããã ã¡ã¢ãªãªãŒã¯ãçºçããå¯èœæ§ããããŸãã 7z.cpp 202
BOOL WINAPI _export SEVENZ_OpenArchive(const char *Name, int *Type) { Traverser *t = new Traverser(Name); if (!t->Valid()) { return FALSE; delete t; } delete s_selected_traverser; s_selected_traverser = t; return TRUE; }
ããã§äœãèŠã€ãããŸããïŒ ãŸããå®éã«ã¯ã
ifã¹ããŒãã¡ã³ãã«å°éã§ããªãã³ãŒãããããŸããæ¡ä»¶ãæºãããããšã颿°ã¯
FALSEãè¿ããäœæ¥ãå®äºã
ãŸã ã ãŸããå°éäžèœãªã³ãŒãã®ãããã¡ã¢ãªãªãŒã¯ã®ã¿ãçºçããŸããããã€ã³ã¿
tã®ãªããžã§ã¯ãã¯åé€ãããŸããã ãšã©ãŒãä¿®æ£ããã«ã¯ããããã¯å
ã®2ã€ã®æŒç®åã亀æããŸãã
次ã®ã³ãŒãã¯ããã€ã³ã¿ãŒãä»ããŠã¯ã©ã¹ïŒæ§é ïŒã®ãªããžã§ã¯ãã®ãµã€ãºã決å®ãããšãã«ãã©ã®ããã«ééãããã瀺ããŠããŸãã
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
- V568 ãsizeofïŒïŒãæŒç®åãã¯ã©ã¹ãžã®ãã€ã³ã¿ã®ãµã€ãºãè©äŸ¡ããã®ã¯å¥åŠã§ããããPInfoãã¯ã©ã¹ãªããžã§ã¯ãã®ãµã€ãºã¯è©äŸ¡ããŸããã filelist.cpp 672
- V568 ãsizeofïŒïŒãæŒç®åãã¯ã©ã¹ãžã®ãã€ã³ã¿ã®ãµã€ãºãè©äŸ¡ããã®ã¯å¥åŠã§ããããPInfoãã¯ã©ã¹ãªããžã§ã¯ãã®ãµã€ãºã¯è©äŸ¡ããŸããã filelist.cpp 673
int64_t FileList::VMProcess(int OpCode, void *vParam, int64_t iParam) { switch (OpCode) { .... case MCODE_V_PPANEL_PREFIX:
äž¡æ¹ã®ãšã©ãŒã¯ãæ§é äœã®äºæ³ãµã€ãºã§ã¯ãªãã
sizeofïŒPInfoïŒããã€ã³ã¿ãŒã®ãµã€ãºïŒ4ãŸãã¯8ãã€ãïŒãè¿ãããšã§ãã ãããã£ãŠã
memsetã¯æ§é äœã®æåã®4ïŒ8ïŒãã€ãã®ã¿ããŒãã§åããŸãããŸãããã€ã³ã¿ãŒã®ãµã€ãºã¯
PInfo-> StructSizeãã£ãŒã«ãã«æžã蟌ãŸããŸãã æ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
.... PluginInfo *PInfo = (PluginInfo*)vParam; memset(PInfo, 0, sizeof(*PInfo)); PInfo->StructSize = sizeof(*PInfo); ....
ã¢ãã©ã€ã¶ãŒã¯ãããã«ããã€ãã®é¡äŒŒããå ŽæãèŠã€ããŸããã
- V568ãsizeofïŒïŒãæŒç®åãã¯ã©ã¹ãžã®ãã€ã³ã¿ã®ãµã€ãºãè©äŸ¡ããã®ã¯å¥åŠã§ããããHistoryItemãã¯ã©ã¹ãªããžã§ã¯ãã®ãµã€ãºã¯è©äŸ¡ããŸããã history.cpp 594
- V568ãsizeofïŒïŒãæŒç®åãã¯ã©ã¹ãžã®ãã€ã³ã¿ã®ãµã€ãºãè©äŸ¡ããã®ã¯å¥åŠã§ããããhandleãã¯ã©ã¹ãªããžã§ã¯ãã®ãµã€ãºã¯è©äŸ¡ããŸããã plugins.cpp 682
å¥åŠãªæ¡ä»¶
ç¹°ãè¿ãã«ãªããŸãããå°ããŠã©ãŒã ã¢ããããŸããã³ãŒãã®æ¬¡ã®éšåã§èªåã§ãšã©ãŒãèŠã€ããŠãã ããã
int FTP::ProcessKey(int Key, unsigned int ControlState) { .... if( !ShowHosts && (ControlState == 0 || ControlState == PKF_SHIFT) && Key == VK_F6) { FTP *ftp = OtherPlugin(this); int rc; if( !ftp && ControlState == 0 && Key == VK_F6) { return FALSE; } .... } .... }
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V560æ¡ä»¶åŒã®äžéšã¯åžžã«trueã§ãïŒããŒ== 0x75ã Key.cpp 493
å€éšããã³å
éšã®æ¡ä»¶ã«æ³šæããŠ
ãã ãã ããããã®
ããŒã¯å®æ°
VK_F6ãšæ¯èŒãããŸãã å¶åŸ¡ãããŒãå
éšæ¡ä»¶ã«éãããšã
Key倿°ã¯
VK_F6ãšçãããªãããšãä¿èšŒããããã®å€æ°ã®2åç®ã®ãã§ãã¯ã¯
äžèŠã«ãªããŸãã ç°¡ç¥åããã圢åŒã§ã¯ã2çªç®ã®æ¡ä»¶ã¯æ¬¡ã®ããã«ãªããŸãã
.... if( !ftp && ControlState == 0) { return FALSE; } ....
ã¢ãã©ã€ã¶ãŒã¯ããã®ãšã©ãŒãšããã€ãã®åæ§ã®ãšã©ãŒã«ã€ããŠèŠåããŸãã
- V560æ¡ä»¶åŒã®äžéšã¯åžžã«çã§ãïŒïŒCpsã DString.cpp 47
- V560æ¡ä»¶åŒã®äžéšã¯åžžã«true :! ShowHostsã§ãã FGet.cpp 139
- V560æ¡ä»¶åŒã®äžéšãåžžã«false :! Wszã cnDownload.cpp 190
- V560æ¡ä»¶åŒã®äžéšã¯åžžã«true :! UserRejectã§ãã extract.cpp 485
- ããã«8ã€ã®è¿œå ã®èšºæã¡ãã»ãŒãžã
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V503ããã¯ç¡æå³ãªæ¯èŒã§ãïŒãã€ã³ã¿ãŒ<=0ãfstd_exSCPY.cpp 8
char *WINAPI StrCpy(char *dest, LPCSTR src, int dest_sz) { if(dest <= 0)
ãã®ã³ãŒãã«ã¯ããã€ã³ã¿ãŒãšè² ã®æ°ã®ç¡æå³ãªæ¯èŒãå«ãŸããŠããŸãïŒãã€ã³ã¿ãŒã¯è² ã®ã¢ãã¬ã¹ãæã€ã¡ã¢ãªé åã§ã¯æ©èœããŸããïŒã ä¿®æ£ãããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
.... if(dest == nullptr) return NULL; ....
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V584 FADC_ALLDISKSå€ã¯ãã==ãæŒç®åã®äž¡åŽã«ãããŸãã åŒãæ£ãããªãããåçŽåã§ããŸãã findfile.cpp 3116
enum FINDASKDLGCOMBO { FADC_ALLDISKS, FADC_ALLBUTNET, .... }; FindFiles::FindFiles() { .... if ( FADC_ALLDISKS + SearchMode == FADC_ALLDISKS
ã¢ãã©ã€ã¶ãŒã¯ãçãããæåã®å¯æ¡ä»¶ãæ€åºããŸããã
FINDASKDLGCOMBOåæã«åºã¥ããŠã宿°
FADC_ALLDISKSã¯0ã
FADC_ALLBUTNETã¯1ã§ããæ¡ä»¶åŒã§å®æ°ã®æ°å€ã代å
¥ãããšã次ã®ããã«ãªããŸãã
if ( 0 + SearchMode == 0 || 0 + SearchMode == 1) { .... }
äžèšã®ã³ãŒãã«åºã¥ããŠãæ¡ä»¶å
šäœãåçŽåã§ããŸãã
if ( SearchMode == FADC_ALLDISKS || SearchMode == FADC_ALLBUTNET) { .... }
誀ã£ããã©ãŒãããæååæäœ
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V576ã®åœ¢åŒãæ£ãããã
ãŸãã ã 'swprintf'颿°ã®4çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã charåã®åŒæ°ãå¿
èŠã§ãã FarEditor.cpp 827
void FarEditor::showOutliner(Outliner *outliner) { .... wchar_t cls = Character::toLowerCase((*region)[region->indexOf(':') + 1]); si += swprintf(menuItem+si, 255-si, L"%c ", cls);
ããã¯ããããç§»æ€ãšã©ãŒã§ãã åé¡ã¯ãVisual C ++ã§ã¯ãã¯ã€ãã©ã€ã³åºå颿°ããã©ãŒãããæååã®æå®åãåç Žãã«è§£éããããšã§ãã
ïŒ
cã¯ãã¯ã€ãæåïŒã¯ã€ãæåã
wchar_t ïŒãæåŸ
ããŸãã Linuxã§ã¯ãç¶æ³ã¯ç°ãªããŸãã
ïŒ
cæå®åã®æšæºã«åŸã£ãŠããã«ããã€ãæåïŒ
char ïŒãæåŸ
ãããŸãã æ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
si += swprintf(menuItem+si, 255-si, L"%lc ", cls);
ã¢ãã©ã€ã¶ãŒã®èŠå ïŒ
V576ã®åœ¢åŒãæ£ãããã
ãŸãã ã 'swprintf'颿°ã®4çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã charåã®ã·ã³ãã«ã®æååãžã®ãã€ã³ã¿ãå¿
èŠã§ãã cmddata.cpp 257
void CommandData::ReadConfig() { .... wchar Cmd[16]; .... wchar SwName[16+ASIZE(Cmd)]; swprintf(SwName,ASIZE(SwName), L"switches_%s=", Cmd);
åæ§ã®ç¶æ³ïŒãã©ãŒãããæååã«ã¯
ïŒ
sæå®åãå«ãŸããããããã«ããã€ãæååïŒ
char * ïŒãæåŸ
ãããŸãã ãã ããæ¬¡ã®ãã©ã¡ãŒã¿ãŒã¯ã¯ã€ãæååïŒ
wchar_t * ïŒãæž¡ããŸããã æ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
swprintf(SwName,ASIZE(SwName), L"switches_%ls=", Cmd);
ã¢ãã©ã€ã¶ãŒã¯ããã©ãŒãããæååã«åŸã£ãŠãã©ã¡ãŒã¿ãŒãæž¡ãä»ã®2ã€ã®èª€ã£ãæ¹æ³ã«ã€ããŠãèŠåããŸãã
- V576圢åŒãæ£ãããããŸããã 'fprintf'颿°ã®3çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã charåã®åŒæ°ãå¿
èŠã§ãã vtansi.cpp 1033
- V576圢åŒãæ£ãããããŸããã 'fprintf'颿°ã®3çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã charåã®åŒæ°ãå¿
èŠã§ãã vtansi.cpp 1038
çµè«
Linuxã®FarããŒãã¯ã©ãã§ããïŒ ã¯ããååãªãšã©ãŒãèŠã€ãããŸãããããããžã§ã¯ããã¢ã«ãã¡çã§ãããéçºãç¶ããŠããããšãå¿ããªãã§ãã ããã éçã³ãŒãåæã®æ¹æ³è«ã䜿çšãããšããšã©ãŒã¯æ©ã段éã§æ€åºããããªããžããªã«å
¥ããããŸããã éçè§£æã®ãã¹ãŠã®å©ç¹ã¯ãéåžžã®äœ¿çšïŒæ¥µç«¯ãªå Žå-ãå€éãã®ã¢ã»ã³ããªäžïŒã§ã®ã¿æããã«ãªãããšã«æ³šæããŠãã ããã
ç§ã«ä»£ãã£ãŠãPVS-Studioã䜿çšããéçè§£æã®å©ç¹ãè©äŸ¡ããããšãææ¡ããŸãããã®è£œåã¯Microsoft Windowsããã³deb / rpmããŒã¹ã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã§å©çšã§ãããããžã§ã¯ããè¿
éãã€å®æçã«ç¢ºèªã§ããŸãã ãŸããããªããåŠçã§ããããåã
ã®éçºè
ã§ãããããªãŒãã³ãªéå¶å©ãããžã§ã¯ãã®éçºã«é¢äžããŠããå ŽåãPVS-Studioã
ç¡æã§äœ¿çšã§ããå¯èœæ§ããããŸãã
ãã®å
¥éãããªã§ã¯ãPVS-Studio for Linuxãã€ã³ã¹ããŒã«ãããããžã§ã¯ãããã°ãã確èªããæ¹æ³ãåŠç¿ã§ããŸãïŒäŸãšããŠFar Managerã䜿çšïŒã
ãŸãããã§ãã¯ãã¹ãè峿·±ããããžã§ã¯ããç¥ã£ãŠããå Žåã¯ã
GitHubã§æäŸã§ããŸãã 詳现ã«ã€ããŠã¯ãã
PVS-Studioã¢ãã©ã€ã¶ãŒã䜿çšãããã¹ãçšãããžã§ã¯ãã®æäŸïŒGitHubã§ã®æäŸ ããã芧ãã ããã
ãã®èšäºãè±èªåã®èŽè¡ãšå
±æãããå Žåã¯ã翻蚳ãªã³ã¯ã䜿çšããŠãã ããïŒãã£ãªããã»ã«ã³ããªã¢ã³ãã
ç§»æ€ã¯ããªã±ãŒããªåé¡ã§ãïŒLinuxã§ã®Far Managerã®ç¢ºèª