éçåæããŒã«ã䜿çšããéã®äž»ãªåé¡ã®1ã€ã¯ã誀æ€ç¥ã®åŠçã§ãã ã¢ãã©ã€ã¶ãŒèšå®ã䜿çšããããã³ãŒããå€æŽãããããŠã誀æ€ç¥ãæé€ããæ¹æ³ã¯å€æ°ãããŸãã ç§ã¯Windowsãããžã§ã¯ãçšã®å°ããªApple IIãšãã¥ã¬ãŒã¿ãŒãåãäžããPVS-Studioéçã¢ãã©ã€ã¶ãŒã¬ããŒããå®éã«äœ¿çšããæ¹æ³ã瀺ããŸããã ãšã©ãŒãä¿®æ£ãã誀æ€ç¥ãæå¶ããæ¹æ³ã®äŸã瀺ããŸãã
ã¯ããã«
ãããžã§ã¯ãã«éçåæææ³ãå°å ¥ããçæ³çãªããã»ã¹ã説æããŸãã ããã¯ãã¢ãã©ã€ã¶ãŒã®ãã¹ãŠã®èª€ã£ãã¢ã©ãŒã ãšå®éã®ãšã©ãŒãæé€ããŠãã¢ãã©ã€ã¶ãŒãèŠåãçæããªãããã«ããããšã§æ§æãããŠããŸãã ããã¯ãUnreal Engine 4ãããžã§ã¯ãã§äœæ¥ãããšãã«äœ¿çšããã¢ãããŒãã§ããå®éã«ã¯ãçæ³çãªã¢ãããŒãã¯ã»ãšãã©äžå¯èœã§ãã ãããã£ãŠã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯ã代æ¿ã¢ãããŒãã䜿çšããã®ãè³¢æã§ãã çŸåšäœ¿çšå¯èœãªãã¹ãŠã®èŠåãé衚瀺ã«ããŠãæ°èŠãŸãã¯å€æŽãããã³ãŒãã«é¢é£ããã¡ãã»ãŒãžã®ã¿ã衚瀺ã§ããŸãã ãã®ãããPVS-Studioã¢ãã©ã€ã¶ãŒã«ã¯ãç¹å¥ãªããŒã¿ããŒã¹ã«æ å ±ãä¿åããç¹å¥ãªã¡ã«ããºã ããããŸãã 詳现ã«ã€ããŠã¯ãèšäºãã芧ãã ããïŒ 10ã¡ã¬ãã€ããè¶ ãããœãŒã¹ã³ãŒãã䜿çšããŠéçåæããããžã§ã¯ãã«å®è£ ããæ¹æ³
ãã®ããããã¹ãŠã®ã¡ãã»ãŒãžãé衚瀺ã«ããŠãæ°ããã³ãŒãã®å質ãæ éã«ç£èŠã§ããŸãã æ°ããã³ãŒãã§ãšã©ãŒãèŠã€ãããšãéç解æææ³ã®åšåãšå©ç¹ãããã«ç解ã§ããŸãã ãŸãã空ãæéãããå Žåã¯ãé衚瀺ã®èŠåã«æ»ããã³ãŒãã«å¿ èŠãªå€æŽãåŸã ã«å ããããšãã§ããŸãã
ããããå®ç§ãªå¹žãã®äžçã«æ»ããŸãããã æéããããPVS-Studioã¢ãã©ã€ã¶ãŒãçæããèŠåãå®å šã«è§£æ±ºã§ãããšæ³åããŠãã ããã
ãã®èšäºã§ã¯ãã¢ãã©ã€ã¶ãŒã®èŠåãåŠçããæ¹æ³ã瀺ããŸãã ãããŠãæåã®ãã§ãã¯ããèŠåã0ã«ãªããŠã£ã³ããŠãŸã§ãå®å šã«é²ã¿ãŸãã
ãããç§ãå°ããªãããžã§ã¯ããéžãã çç±ã§ãã ç§ã¯ãã£ââãšåãããšãã§ããŸãããããããèšäºãæžãã®ã«ããããããããªãã¯ãããèªãã§ãããã ããããããªãã¯ãŸã ç²ããŠããŸãã å°èŠæš¡ãªãããžã§ã¯ãã§ãã£ãŠãèšäºã¯å€§ãããªããŸããã泚æããŠãã ããã ã³ãŒãã¢ãã©ã€ã¶ãŒãããæå¹ã«æŽ»çšããã®ã«åœ¹ç«ã¡ãŸãã
å®éšçšããŠã¹ã¯ã Windowsãããžã§ã¯ãçšã®Apple IIãšãã¥ã¬ãŒã¿ãŒã§ãã ã éžæã¯å¶ç¶åœŒã«å®å šã«èœã¡ãŸããã ãããã£ãŠãç§ãã¡ã¯ããã«ãã ãããªãã§ãããã ã©ã®ãããžã§ã¯ããæ¡çšãããã¯æ°ã«ããŸããã§ãããäž»ãªããšã¯å°ããããããšã§ããããåæã«äœãé¢çœãããšããããŸããã
ãããžã§ã¯ãã®ç¹åŸŽïŒ
- ãœãŒã¹ã³ãŒããµã€ãºïŒ3ã¡ã¬ãã€ãã
- ã³ãŒãã®è¡æ°ïŒ85700ã
- åææéïŒ8ããã»ããµãŒã³ã¢ïŒïŒ30ç§ã
æåã®æã¡äžã
ã¢ãã©ã€ã¶ãŒã®æåã®èµ·ååŸã次ã®èŠåã衚瀺ãããŸããå³1. Windowsãããžã§ã¯ãçšã®Apple IIãšãã¥ã¬ãŒã¿ãŒã®PVS-Studioã¢ãã©ã€ã¶ãŒã®æåã®èµ·åæã«çºè¡ãããèŠåã
ãã®èšäºã§ã¯ãäžè¬åæïŒGAïŒã«é¢é£ããã¬ãã«1ããã³ã¬ãã«2ã®èŠåã«ã€ããŠã®ã¿èª¬æããŸãã ã¬ãã«3ã§ãåã€ãããšã¯å¯èœã§ãããèšäºã¯åŒãããããŸãã ã¬ãã«3ãéåžžã«ãã°ãã確èªããããã€ã説æããŸãããäœãä¿®æ£ããŸããã
埮å°æé©åïŒOPïŒïŒä»ã§ã¯é¢çœããªãã
64ããã蚺æã«ã€ããŠïŒãããžã§ã¯ãã«ã¯64ãããæ§æããããŸããã é¢çœããªãã
ãããžã§ã¯ãã確èªããåŸããã¹ãŠã®èŠåãã³ãŒãã§ãœãŒãããŸããã ããã¯ããã³ãŒããåãã¯ãªãã¯ããŠå®è¡ã§ããŸãïŒå³N2ãåç §ïŒã
å³2. PVS-Studioã¡ãã»ãŒãžãŠã£ã³ããŠã ã¡ãã»ãŒãžã¯èšºæçªå·ã§ãœãŒããããŸãã
ã³ãŒãã®äžŠã¹æ¿ãã«ãããã¡ãã»ãŒãžã³ã°ã容æã«ãªããŸãã åãã¿ã€ãã®ã¡ãã»ãŒãžã®ã°ã«ãŒããçºçããŸãã 1ã€ã®ã¡ãã»ãŒãžãçºçããçç±ãç解ããããæ®ããç°¡åãã€è¿ éã«åŠçã§ããŸãã
ã泚æ èªè ã¯ããªããã®ãœãŒããããã«è¡ããªãã®ãçåã«æããããããŸããã å®éããŠãŒã¶ãŒãåæããã»ã¹ã§ã¡ãã»ãŒãžãèŠãããšãã§ããããã«ãããã®ã§ãã ãããããœãŒããããšãåæããã»ã¹ã®æ°ããã¡ãã»ãŒãžã¯æåŸã«è¿œå ãããããªã¹ãå ã®å¥ã®å Žæã«è¿œå ãããŸãã ãã®çµæãã¡ãã»ãŒãžã¯ããžã£ã³ããããŸãã ãã®ãããªããŽããŽãããããªã¹ãã§äœæ¥ããããšã¯äžå¯èœã§ãã
ã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžã®æäœ
ãœãªã¥ãŒã·ã§ã³ã«ã¯3ã€ã®ãããžã§ã¯ãããããŸãïŒå³N2ã®[ãœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒ]ãŠã£ã³ããŠã«è¡šç€ºãããŸãïŒã ãããã®ãã¡ã®2ã€ãzlibãšzip_libã¯ããã§ãã¯ããã®ã«èå³ããããŸããã ãããã£ãŠããããã¯åæããé€å€ããå¿ èŠããããŸãã å®éã«ã¯ãzlibã¯ãã§ã«ããã©ã«ãã§äŸå€ã«è¿œå ãããŠãããããzip_libãé€å€ããã ãã§ååã§ãã ããã¯PVS-Studioã®èšå®ãŠã£ã³ããŠã§è¡ããŸãïŒ[ ãã¡ã€ã«ããã§ãã¯ããªã]ã»ã¯ã·ã§ã³ïŒïŒå³N3ã ãã§ãã¯ããzip_libãé€å€ããŸããã
äžèŠãªãããžã§ã¯ããäºåã«é€å€ããŸããã ãã ããããã¯ç¢ºèªåŸã«ç°¡åã«è¡ããŸãã ãããŠãããã®ããã®èšå®ã«è¡ãå¿ èŠã¯ãããŸããã ã³ã³ããã¹ãã¡ãã¥ãŒã«ã¯ããã¡ã€ã«ãŸãã¯ç¹å®ã®ãã£ã¬ã¯ããªã«é¢é£ãããã¹ãŠã®ã¡ãã»ãŒãžãç°¡åã«é衚瀺ã«ã§ããã¢ã€ãã ããããŸãã ãšãŠã䟿å©ã§ãã èšäºã PVS-Studio for Visual C ++ ãã«ç²Ÿéããããšããå§ãããŸãã ããŒã«ã®å¹æçãªäœ¿çšã«åœ¹ç«ã€ãã®æ©èœããã³ãã®ä»ã®æ©èœã«ã€ããŠèª¬æããŸãã
ããã§ãã¡ãã»ãŒãžã®åŠçãéå§ããæºåãæŽããŸããã çªå·V501ã®èšºæããå§ããŠãããã«é²ãã§ãããŸãããã åèšã§ã32 + 49 = 81件ã®æçš¿ãæ€èšããŸãã ããã¯ããªããããããããŸãã ãããã£ãŠãããã€ãã®å Žæã§ã¯è©³çŽ°ã«èª¬æããããã€ãã®å Žæã§ã¯ç°¡åã«èª¬æããŸãã
ãã¯ãåœã¢ã©ãŒã xxxxxREG
æåã®6ã€ã®ã¡ãã»ãŒãžã¯ãADDXXREGãADCHLREGãSBCHLREGãSBCHLREGã®è€éãªãã¯ãã«ãããã®ã§ãã ããããéããããšãåé·ãªæ§é ãçºçããã¢ãã©ã€ã¶ã¯ãããšãã°æ¬¡ã®ã¡ãã»ãŒãžãçæããŸããV501 '^'æŒç®åã®å·Šå³ã«åãéšååŒããããŸãïŒïŒtmp >> 8ïŒ^ reg_ixh ^ reg_ixh z80.cpp 3444
ADDXXREGãã¯ãã¯éåžžã«å€§ãããä»ã®ãã¯ãã§æ§æãããŠããŸãã ãããã£ãŠãèšäºã§ã¯åŒçšããŸããã
XORæäœã¯ãå€æ°reg_ixhã䜿çšããŠ2åå®è¡ãããããšãéèŠã§ãã ãããã£ãŠãåŒã¯ïŒtmp >> 8ïŒã«ç°¡ç¥åã§ããŸãã ãã ããããã§ééãã¯ãããŸããã ç¹å®ã®ãã¯ãåŒæ°ã眮æãããšãã«ãéå°ãªåŒã§ããããšãå€æããŸããã
ADDXXREGïŒreg_ixhãreg_ixlãreg_ixhãreg_ixlã15ã2ïŒ;
ãããã¯èª€æ€ç¥ã§ãããæé€ããå¿ èŠããããŸãã ãããã«é¢é£ãããã¹ãŠã®èŠåãæå¶ããŸãã ãããè¡ãããã«ããããã®ãã¯ãã宣èšãããŠããããããŒãã¡ã€ã«ã«ã次ã®ã³ã¡ã³ããè¿œå ããŸããã
- //-VïŒADDXXREGïŒ501
- //-VïŒADCHLREGïŒ501
- //-VïŒSBCHLREGïŒ501
- //-VïŒSBCHLREGïŒ501
ãã®èŠåæå¶ã¡ã«ããºã ã®è©³çŽ°ã«ã€ããŠã¯ãããã¥ã¡ã³ãã®å¯Ÿå¿ããã»ã¯ã·ã§ã³ãåç §ããŠãã ãã ã
ååãšããŠã1ã€ã®ã³ã¡ã³ãã§å¯Ÿå¿ã§ããŸãã ãã¹ãŠã®ãã¯ãã®ååã«ã¯ãREGããä»ããŠããŸãã ãããã£ãŠãã³ã¡ã³ãã1ã€æžãããšãã§ããŸãïŒ//-VïŒREGïŒ501ã ãREGããçºçããè¡ã®V501èŠåãæå¶ããŸãã ãã ããäžèšã®ãã¯ãã«é¢é£ããªãæçšãªã¡ãã»ãŒãžã誀ã£ãŠé衚瀺ã«ããå¯èœæ§ããããããããã¯æªãããšã§ãã æ€çŽ¢ã«ãã©ã±ãããè¿œå ããããšã§ãç¶æ³ãå°ãæ¹åã§ããŸãã//-VïŒREGïŒïŒ501ã
sprintfïŒïŒé¢æ°ãã©ã¡ãŒã¿ãŒã®ãšã©ãŒ
sprintf( sText, "%s %s = %s\n" , g_aTokens[ TOKEN_COMMENT_EOL ].sToken , g_aParameters[ PARAM_CATEGORY ].m_sName , g_aParameters[ eCategory ] );
èŠåïŒV510ãsprintfãé¢æ°ã¯ãã¯ã©ã¹ã¿ã€ãå€æ°ã5çªç®ã®å®åŒæ°ãšããŠåãåãããšã¯æ³å®ãããŠããŸããã debug.cpp 2300
å®éã5çªç®ã®å®åŒæ°ã¯Command_tåã®æ§é äœã§ãã ã©ããããg_aParameters [eCategory] ââ.m_sNameãåŒæ°ãšããŠäœ¿çšããå¿ èŠããããŸãã ã³ãŒãã«é©åãªå€æŽãå ããŸããã
æªèãŒãã¡ã¢ãªïŒïŒ
次ã®ã¡ãã»ãŒãžã¯ã1ã€ã®é åããã£ã±ãã§ã¯ãªãããšã瀺ããŠããŸããV512ãmemsetãé¢æ°ãåŒã³åºããšããããã¡ãŒãpHDD-> hd_bufãã®ã¢ã³ããŒãããŒãçºçããŸãã harddisk.cpp 491 BYTE hd_buf[HD_BLOCK_SIZE+1]; // Why +1? ZeroMemory(pHDD->hd_buf, HD_BLOCK_SIZE);
æåŸã®ãã€ãã¯ãªã»ãããããŸããã ãããééããã©ããã¯ããããŸããã ã³ã¡ã³ãã«æ³šæããŠãã ããã ãããããéçºè èªèº«ã§ãããé åã®ãµã€ãºãšããããå®å šã«ãŒãã«ãããã©ãããç¥ããŸããã
ãã®ã³ãŒãã¯ç¡èã§ãããšèšãããŠããŸãã å¿ ãããééã£ãŠããããã§ã¯ãããŸããããçããããå°æ¥çã«ééããåŒãèµ·ããå¯èœæ§ããããŸãã
ã³ã¡ã³ãã§ãã®èŠåãé衚瀺ã«ããŸãã ãã¡ã€ã«ãèªåã§å€æŽããããã¡ãã¥ãŒé ç®ãéžæããã¡ãã»ãŒãžã誀èŠå ±ãšããŠããŒã¯ãããã䜿çšã§ããŸãã
å³3.ã³ã¡ã³ããã³ãŒãã«è¿œå ããŠèŠåãæå¶ããŸãã
ãã®ã¢ã€ãã ãéžæãããšãã¢ãã©ã€ã¶ãŒã¯ã³ãŒãã«ã³ã¡ã³ããæ¿å ¥ããŸãã
ZeroMemory(pHDD->hd_buf, HD_BLOCK_SIZE); //-V512
memcpyïŒïŒé¢æ°åŒã³åºãã§ã®èª€æ€åº
unsigned char random[ 256 + 4 ]; memcpy( &memmain[ iByte ], random, 256 );
memcpyïŒïŒé¢æ°ã¯ããã©ã³ãã ããããã¡ãŒã®äžéšã®ã¿ãã³ããŒããŸãã ã¢ãã©ã€ã¶ã¯ããããçããããšã¿ãªããæ£çŽã«å ±åããŸãã ãã®å Žåã圌ã¯ééã£ãŠãããééãã¯ãããŸããã åã®äŸã®ããã«ãã³ã¡ã³ãã䜿çšããŠèŠåãæå¶ããŸããã ããŸãçŸããã¯ãããŸããããä»ã®äººã®ã³ãŒãã§äœããã¹ããããããŸããã
è¿œå ã®ã¢ã¯ã·ã§ã³
nAddress_ = 0; nAddress_ = (unsigned)*(LPBYTE)(mem + nStack); nStack++; nAddress_ += ((unsigned)*(LPBYTE)(mem + nStack)) << 8;
èŠåïŒV519ãnAddress_ãå€æ°ã«ã¯é£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ568ã569ãdebugger_assembler.cpp 569
ã¢ãã©ã€ã¶ãŒã¯ãå€æ°nAddress_ã«ããŸããŸãªå€ãé£ç¶ããŠæ°åå²ãåœãŠãããŠããããšã«æ°ä»ããŸããã ããã«ã¯ééãã¯ãªããäœåãªã³ãŒãããããŸãã å€æ°ã«å€0ãå²ãåœãŠãããŠããæåã®è¡ãåé€ããŸãããèŠåãåãé€ããã1ã€ã®ãªãã·ã§ã³ã¯ã2çªç®ã®å²ãåœãŠãã+ =ãã«çœ®ãæããããšã§ãã
åæ§ã®ç¶æ³ã¯ãããã«2ã€ã®ãã¡ã€ã«ã§ç¢ºèªã§ããŸãã
video.cppãã¡ã€ã«ïŒ3310è¡ããã³3315è¡ãåç §ïŒã äœåãªæäœãpSrc + = nLen;ããåé€ããŸããã
Debug.cppãã¡ã€ã«ïŒè¡5867ããã³5868ãåç §ïŒã 眮æïŒ
char *p = sLine; p = strstr( sLine, ":" );
ã«
char *p = strstr( sLine, ":" );
ç§ã¯ãããã®æçã«ã€ããŠã¯èªããŸããã
switchã¹ããŒãã¡ã³ãã®ãšã©ãŒ
次ã®V519蚺æã¯ããã§ã«æ·±å»ãªãšã©ãŒã瀺ããŠããŸãã ééãã¯å€å žçãªãã®ã§ããã誰ããããã«ã€ããŠç¥ã£ãŠããŸãããç§ãã¡ã¯ããŸããŸãªããã°ã©ã ã§äœåºŠãäœåºŠããããæºãããŸãã switch( c ) { case '\\': eThis = PS_ESCAPE; case '%': eThis = PS_TYPE; break; default: sText[ nLen++ ] = c; break; }
èŠåïŒV519ãpãå€æ°ã«ã¯ãé£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã ãã§ãã¯è¡ïŒ5867ã5868ãdebug.cpp 5868
ãeThis = PS_ESCAPE;ãã®åŸããbreakãã¹ããŒãã¡ã³ãã¯ãããŸããã ãã®ããããeThisãå€æ°ã®å€ã¯ããã«PS_STYPEã«å€ãããŸãã ããã¯æãããªééãã§ãã ãããä¿®æ£ããããã«ããbreakãã¹ããŒãã¡ã³ããè¿œå ããŸããã
ãšã©ãŒïŒåžžã«åœã®ç¶æ
inline static ULONG ConvertZ80TStatesTo6502Cycles(UINT uTStates) { return (uTStates < 0) ? 0 : (ULONG) ((double)uTStates / uZ80ClockMultiplier); }
èŠåïŒV547åŒ 'uTStates <0'ã¯åžžã«falseã§ãã 笊å·ãªãã®åã®å€ã<0ã«ãªãããšã¯ãããŸãããz80.cpp5507
ããã°ã©ãã¯ãè² ã®å€ãé¢æ°ã«æž¡ãããå Žåãã身ãå®ããããšèããŠããŸããã ãã ãããuTStatesãå€æ°ã¯ç¬Šå·ãªãã§ãããããä¿è·ã¯æ©èœããŸããã
ã¿ã€ã 'INT'ã«æ瀺çãªãã£ã¹ããè¿œå ããŸããã
return ((INT)uTStates < 0) ? 0 : (ULONG) ((double)uTStates / uZ80ClockMultiplier);
ã¢ãã©ã€ã¶ãŒã®é床ã®æ³šæå
次ã®é¢æ°ã§ã¯ãé åãç¯å²å€ã«ãªãå¯èœæ§ãããããšãã¢ãã©ã€ã¶ã¯å¿é ããŠããŸãã void SetCurrentImageDir(const char* pszImageDir) { strcpy(g_sCurrentDir, pszImageDir); int nLen = strlen( g_sCurrentDir ); if( g_sCurrentDir[ nLen - 1 ] != '\\' ) .... }
èŠåïŒV557ã¢ã¬ã€ã¢ã³ããŒã©ã³ãçºçããå¯èœæ§ããããŸãã 'nLen-1'ã€ã³ããã¯ã¹ã®å€ã¯-1ã«éããå¯èœæ§ããããŸãã applewin.cpp 553
空ã®æååãé¢æ°ã«æž¡ããšããã®é·ãã¯ãŒãã«ãªããŸãã 次ã«ãé åã®ãªãŒããŒãããŒãçºçããŸãïŒg_sCurrentDir [0-1]ã
ã¢ãã©ã€ã¶ãŒã¯ããã®ãããªç¶æ³ãå¯èœãã©ãããç¥ããŸããã ãããã£ãŠã念ã®ãããèŠåããŸãã
ãã®ãããªç¶æ³ãå¯èœãã©ããã¯ããããŸããã å¯èœã§ããã°ãã¢ãã©ã€ã¶ãŒã¯ãšã©ãŒãæ€åºããŸããã ããã§ãªãå Žåãããã¯èª€æ€ç¥ã§ãã
ããã誀æ€ç¥ãšèŠãªãããšã«ããŸããã ãã ããèŠåãæå¶ããã³ã¡ã³ããè¿œå ããããããã³ãŒããæ¹åããæ¹ã䟿å©ã§ãã ãããã£ãŠãé¢æ°ã«è¿œå ã®ãã§ãã¯ãè¿œå ããŸãã
if (nLen == 0) return;
çè«çã«ã¯ãé åãç¯å²å€ã«ãªãå Žæããã1ã€ãããŸãã ããããç§ãã¡ã¯èšäºãæ¿ãåç §ã«å€ããªãããã«ããªããã°ãªããŸããã ãããã£ãŠããã®èŠåã«ã€ããŠã¯èª¬æãããã³ã¡ã³ãã䜿çšããŠãããæå¶ããŸãã åããã¡ã€ã«ãåç §ããŠãã ããïŒ556è¡ç®ïŒã
æ¯èŒã§ã¯ãªãå²ãåœãŠ
if ((bytenum == 3) && (byteval[1] = 0xAA)) {
èŠåïŒV560æ¡ä»¶åŒã®äžéšã¯åžžã«çã§ãïŒïŒbyteval [1] = 0xAAïŒã diskimagehelper.cpp 439
ã=ãã§ã¯ãªãã==ãæäœãå®è¡ãããã£ãã®ã¯ééããããŸããã å²ãåœãŠãå¿ èŠãªå Žåã¯ã次ã®ããã«èšè¿°ããæ¹ãã¯ããã«èªç¶ã§ãã
if (bytenum == 3) { byteval[1] = 0xAA;
ãããã£ãŠãããã¯ééãã§ãããä¿®æ£ããå¿ èŠããããŸãã
if ((bytenum == 3) && (byteval[1] == 0xAA))
ãã¯ã誀æ€ç¥
if ((TRACKS_MAX>TRACKS_STANDARD) && ....)
èŠåïŒV560æ¡ä»¶åŒã®äžéšã¯åžžã«çã§ãïŒïŒïŒ35 + 5ïŒ> 35ïŒã diskimagehelper.cpp 548
ãã¯ããå±éãããšãåŒïŒïŒ35 + 5ïŒ> 35ïŒãåŸãããŸãã ãã®è¡šçŸã¯åžžã«çå®ã§ãããééãã§ã¯ãããŸããã
ããã¯ç§ãäœããã¹ããããç¥ããªãå Žåã§ãã åè·¯å³ã§ã¯ãã³ã¡ã³ãã䜿çšããŠèª€æ€åºãæå¶ããŠããŸãïŒ//-V560ã
è¿œå å€æ°
ãªãã¡ã¯ã¿ãªã³ã°ããã»ã¹ã§ã¯ãã倱ããããå€æ°ãæ®ãããšããããŸãã ãããã¯äœããã®åœ¢ã§ã³ãŒãã§äœ¿çšãããŠããŸãããå®éã«ã¯å¿ èŠãããŸããã æããã«ãããã¯bForegroundå€æ°ã§èµ·ãã£ãããšãšãŸã£ããåãã§ãã BOOL bForeground; .... bForeground = FALSE; .... if( bForeground ) dwCoopFlags |= DISCL_FOREGROUND; else dwCoopFlags |= DISCL_BACKGROUND; .... if( hr == DIERR_UNSUPPORTED && !bForeground && bExclusive )
ããã«ã 'bForeground'å€æ°ã¯ã©ãã§ãå€æŽãŸãã¯äœ¿çšãããŸããã ããã«ããã次ã®èŠåã衚瀺ãããŸããV560æ¡ä»¶åŒã®äžéšãåžžã«true :! BForegroundã mouseinterface.cpp 690
ããã¯å²åŠã®èå³æ·±ãäŸã§ãã ããã¯èª€æ€ç¥ã§ããïŒ äººã§ããçããã®ã¯é£ããã§ãã ã¢ãã©ã€ã¶ãŒã¯ç°åžžã®æ€åºã«æé©ã§ãã ãããã人éã®èŠ³ç¹ãããããšããã®ãã©ã°ã¡ã³ãã¯äžå®å šãªã³ãŒãã§ããå¯èœæ§ããããŸãã ãããŠããã¹ãŠãæŽç¶ãšããŠããŸãã
ããã¯ãåãã®ããã³ãŒããã®å¥ã®äŸã§ãããšæ³å®ããŠããŸãã ãbForegroundãå€æ°ãã³ãŒãããåé€ããŸããã
æªå®çŸ©ã®åäœ
*(mem+addr++) = (opcode >= BENCHOPCODES) ? 0x00 : ((addr >> 4)+1) << 4;
èŠåïŒV567æªå®çŸ©ã®åäœã 'addr'å€æ°ã¯ãã·ãŒã±ã³ã¹ãã€ã³ãéã§2å䜿çšãããŠããéã«å€æŽãããŸãã cpu.cpp 564
åŒã®èšç®æ¹æ³ã¯äžæã§ãã
- ããããå€æ° 'addr'ãæåã«å¢å ãã次ã«åŒã®å³åŽã§äœ¿çšãããŸãã
- ãããŠãã®éãããããŸããã
*(mem+addr) = (opcode >= BENCHOPCODES) ? 0x00 : ((addr >> 4)+1) << 4; addr++;
wsprintfïŒïŒé¢æ°ãªã©ãåŒã³åºããšãã®ç¡å¹ãªåŒæ°
ééã£ãæ°ã®å®éã®åŒæ°ããã©ãŒããããããåºåé¢æ°ã«æž¡ãããšã«é¢é£ããããã€ãã®ãšã©ãŒããããŸãã åèšã§ããã®ãããªãšã©ãŒã10åèŠã€ãããŸãããã1ã€ã ããæ€èšããŸãã wsprintf( sText, TEXT("%s full speed Break on Opcode: None") , sAction , g_iDebugBreakOnOpcode , g_aOpcodes65C02[ g_iDebugBreakOnOpcode ].sMnemonic );
èŠåïŒV576ã®åœ¢åŒãæ£ãããããŸããã ãwsprintfAãé¢æ°ã®åŒã³åºãäžã«ãç°ãªãæ°ã®å®åŒæ°ãäºæãããŸãã äºæ³ïŒ3.çŸåšïŒ5. debug.cpp 939
æååã圢æãããšããæåŸã®2ã€ã®ãã©ã¡ãŒã¿ãŒã¯èæ ®ãããŸããã éšå€è ãšããŠããããã®ãã©ã¡ãŒã¿ãŒãäžèŠã§ããããŸãã¯ãã©ãŒãããæååã«ééãããããšèšãã®ã¯é£ããã§ãã
ãã©ã¡ãŒã¿ãäžèŠã§ãããšå€æããåé€ããŸããã
以äžã®ã³ãŒãã»ã¯ã·ã§ã³ã§ãåæ§ã®åé¡ãçºçããŠããŸãã
- äºæ³ïŒ8.çŸåšïŒ9. debug.cpp 7377
- äºæ³ïŒ3.çŸåšïŒ4. debugger_help.cpp 1263
- äºæ³ïŒ3.çŸåšïŒ4. debugger_help.cpp 1265
- äºæ³ïŒ3.çŸåšïŒ4. debugger_help.cpp 1267
- äºæ³ïŒ3.çŸåšïŒ4. debugger_help.cpp 1282
- äºæ³ïŒ3.çŸåšïŒ4. debugger_help.cpp 1286
- äºæ³ïŒ3.çŸåšïŒ4. debugger_help.cpp 1288
- äºæ³ïŒ5.çŸåšïŒ4. debugger_help.cpp 1332
- äºæ³ïŒ3.çŸåšïŒ4. frame.cpp 691
- äºæ³ïŒ3.çŸåšïŒ4. frame.cpp 695
ãïŒ 08Xãã䜿çšããŠãã€ã³ã¿å€ãåºåããå Žæãããã€ããããŸãã 32ãããã·ã¹ãã ã§ã¯ãããã¯å®éã«æ©èœããŸãã ãã ãã64ãããã·ã¹ãã ã§ã¯ããã€ã³ã¿ãŒã®äžéšã®ã¿ãåºåãããŸãã æ£ãã解決çã¯ããïŒ pãã䜿çšããããšã§ãã é¢é£ããã³ãŒãã»ã¯ã·ã§ã³ïŒ
- ãã€ã³ã¿ãŒã®å€ãåºåããã«ã¯ããïŒ pãã䜿çšããå¿ èŠããããŸãã tfe.cpp 507
- ãã€ã³ã¿ãŒã®å€ãåºåããã«ã¯ããïŒ pãã䜿çšããå¿ èŠããããŸãã tfe.cpp 507
äºéæ¯èŒã®èª€æ€ç¥
ã¢ãã©ã€ã¶ãŒã«é害ã¯ãããŸããã§ããããç¹°ãè¿ãæ¡ä»¶ã§2ã€ã®èª€æ€åºãçºçããŸããã 1ã€ã®ã±ãŒã¹ãèããŠã¿ãŸãããïŒ if (nAddress <= _6502_STACK_END) { sprintf( sText,"%04X: ", nAddress ); PrintTextCursorX( sText, rect ); } if (nAddress <= _6502_STACK_END) { DebuggerSetColorFG( DebuggerGetColor( FG_INFO_OPCODE )); sprintf(sText, " %02X",(unsigned)*(LPBYTE)(mem+nAddress)); PrintTextCursorX( sText, rect ); }
èŠåïŒV581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªïŒ2929ã2935ãdebugger_display.cpp 2935
ééãã¯ãããŸããã ããã°ã©ããŒã¯ãåã«2ã€ã®ã¢ã¯ã·ã§ã³ã»ãããåå²ããŸããã ã¢ãã©ã€ã¶ãŒã®èŠ³ç¹ãããããšããã®ãããªã³ãŒãã¯çããããã®ã§ãã çªç¶æ¡ä»¶ãç°ãªãã¯ãã§ããïŒ ããã«ãããããããäœãã誀æ€ç¥ã§è¡ãå¿ èŠããããŸãã 2ã€ã®æ¡ä»¶ã¹ããŒãã¡ã³ãã1ã€ã«ãŸãšããããšã«ããŸããã
if (nAddress <= _6502_STACK_END) { sprintf( sText,"%04X: ", nAddress ); PrintTextCursorX( sText, rect ); DebuggerSetColorFG( DebuggerGetColor( FG_INFO_OPCODE )); sprintf(sText, " %02X",(unsigned)*(LPBYTE)(mem+nAddress)); PrintTextCursorX( sText, rect ); }
ã³ãŒãã®å¯èªæ§ã¯ããã«èŠããããšã¯ãªãã£ããšæããŸãããéäžã§èª€æ€åºãåãé€ããŸããã
2çªç®ã®ã±ãŒã¹ã¯é¡äŒŒããŠããŸãïŒV581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ2237ã2245ãdebugger_display.cpp 2245
å³5.é·ãèšäºã®éäžã§ãèªè ãäŒæ©ã§ããããã«åçãæ¿å ¥ããããšããå§ãããŸãã æ¿å ¥ããèšäºã®ç»åãããããŸããã ãããã£ãŠãããã§ã¯ããªãã®ããã®ç«ã§ãã
æ€èšŒåã®ãã€ã³ã¿ãŒã®éåç §
åèšã§ãã¢ãã©ã€ã¶ãŒã¯ãã®ãããã¯ã«é¢ããŠ3ã€ã®èŠåãçºè¡ããŸããã æ®å¿µãªããããããã®å Žæã«ããããã°ã©ã ã®ããã¹ãã¯ããªãæ··ä¹±ããŠããŸãã ãããã£ãŠãç°¡åã«ããããã«ãå®éã®ã³ãŒãã§ã¯ãªããæ¬äŒŒã³ãŒããæäŸããŸãã æåã®2ã€ã®èŠåã«ã€ããŠã¯ãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã int ZEXPORT unzGetGlobalComment(char *szComment) { .... if (A) { *szComment='\0'; return UNZ_ERRNO; } .... if ((szComment != NULL) && X) .... }
èŠåïŒV595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ã 'szComment'ãã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯è¡ïŒ1553ã1558ãunzip.c 1553
ã芧ã®ãšãããæž¡ããããã€ã³ã¿ãŒ 'szComment'ã¯NULLã«ãªãå ŽåããããŸãã ããã¯ããã§ãã¯ã«ãã£ãŠèšŒæãããŸãïŒszCommentïŒ= NULLïŒã
ãã ãããã§ãã¯ãå®è¡ããã«ãã€ã³ã¿ãŒã倧èã«éåç §ãããã³ãŒãã®ã»ã¯ã·ã§ã³ããããŸãã ããã¯å±éºã§ãã å®éã«ã¯ã 'szComment'ã0ã®ç¶æ³ã¯æ±ºããŠãªãå¯èœæ§ããããŸããããããã³ãŒãã¯å±éºã§ãããä¿®æ£ããå¿ èŠããããŸãã
é¡äŒŒïŒV595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpToken_ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ811ã823ãdebugger_parser.cpp 811
ããããæåŸã®3çªç®ã®ã±ãŒã¹ã§ã¯ããã¹ãŠãããè€éã§ãã ãã®ãããªã³ãŒããééã£ãŠããŠä¿®æ£ããå¿ èŠãããããšã蚌æããã®ã¯ããããããã§ãã é¢æ°ã¯çãã®ã§ãå šäœã説æããŸã
bool ArgsGetValue ( Arg_t *pArg, WORD * pAddressValue_, const int nBase ) { TCHAR *pSrc = & (pArg->sArg[ 0 ]); TCHAR *pEnd = NULL; if (pArg && pAddressValue_) { *pAddressValue_ = (WORD)(_tcstoul( pSrc, &pEnd, nBase) & _6502_MEM_END); return true; } return false; }
èŠåïŒV595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpArgããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ204ã207ãdebugger_parser.cpp 204
ãã€ã³ã¿ãŒãpArgãã¯ããifïŒpArg && pAddressValue_ïŒããšããæ¡ä»¶ããæãããªããã«ããŒãã«ãªãå ŽåããããŸãã ãã ãããã€ã³ã¿ãŒããã§ãã¯ãããåã«ãåŒã§äœ¿çšãããŸãã
TCHAR *pSrc = & (pArg->sArg[ 0 ]);
ãã®åŒã¯ãæªå®çŸ©ã®ããã°ã©ã ã®åäœã«ã€ãªãããŸãã NULLãã€ã³ã¿ãŒãéåç §ããããšã¯ã§ããŸããã
å€ãã®äººã¯ããã®ãããªã³ãŒãã§ã¯ã¡ã¢ãªã¢ã¯ã»ã¹ããªããäžéšã®ã¢ãã¬ã¹ã®ã¿ãèšç®ãããããšã«å察ããŠããŸãã ãããã£ãŠãåé¡ã¯ãããŸããã ãã ããããã¯äžæ確ãªåäœã®è§£éãçãããã ã³ã³ãã€ã©ã®åäœãšã³ãŒãã®åäœãæšæž¬ããå¿ èŠã¯ãããŸããã ã ããããªãã¯æžãããšãã§ããããã®çç±ãè°è«ããã®ã¯æå³ããããŸããã
ãã®ãããªã³ãŒãã®æªå®çŸ©ã®åäœã¯ããŒãã¡ã¢ãªã¢ãã¬ã¹ãžã®åç §ã ãã§ã¯ãããŸããïŒå®éã«ã¯ååšããªãå ŽåããããŸãïŒã ããšãã°ãã³ã³ãã€ã©ãŒã¯ããã§ãã¯æ¡ä»¶ããifïŒpAddressValue_ïŒãã«æžããããšãã§ããŸãã ãpArg-> xxxããšããåŒãããããããã€ã³ã¿ã¯ééããªãnullã§ã¯ãªãããã§ãã¯ããå¿ èŠã¯ãããŸããã
ãã®åé¡ããã詳现ã«è°è«ããæå³ã¯ãããŸããã ç¹å¥ãªèšäºãèªãããšããå§ãããŸãïŒ nullãã€ã³ã¿ãŒã®éåç §ã¯æªå®çŸ©ã®åäœã«ã€ãªãããŸã
ã³ãŒãã¯ç°¡åã«ä¿®æ£ã§ããŸãã 'if'å ã§å€æ°ã®å®£èšã転éããã ãã§ååã§ãã
æãããè¡šæ
ã¢ãã©ã€ã¶ãŒã¯ã次ã®åŒã§æ··ä¹±ããŠããŸããã if ((cx > 4) & (cx <= 13))
èŠåïŒV602 'ïŒcx> 4ïŒ'åŒã®æ€æ»ãæ€èšããŠãã ããã ã>ãã¯ã>>ãã«çœ®ãæããããå¯èœæ§ããããŸãã debug.cpp 8933
ã¢ãã©ã€ã¶ãŒã¯ã 'ïŒ'æŒç®åã䜿çšãããŠããããšã確èªããŸãããªãã©ã³ãã¯ãé©çšãããå 'bool'ã§ãã ããã¯å€ã§ãã éåžžããã®ãããªå Žåãè«çæŒç®åã&&ãã䜿çšããã®ãäžè¬çã§ãã
ãïŒãæŒç®åã¯ããããåäœã®æŒç®ã«ãã䜿çšãããŸãã ãããã£ãŠãã¢ãã©ã€ã¶ãŒã¯ãããã§ãããã䜿çšããããšããå¯èœæ§ã瀺åããŸããã
if ((cx >> 4) & (cx <= 13))
ã¢ãã©ã€ã¶ãŒãè³¢ãããŠééã£ãŠããŸãã ãã ããããã°ã©ããŒã®è²¬ä»»ãããã«ãããŸãã ãã®ã³ãŒãã«ã¯åãããããŸãã æžãæ¹ãã¯ããã«èªç¶ã§ãïŒ
if (cx > 4 && cx <= 13)
ãã¯ãã®äžç¹å®ã®åäœãšææ
è² ã®å€ãå³ã«ã·ãããããšãçµæãã©ããªããã¯æ確ã§ã¯ãããŸããã ã³ãŒãã®åäœã¯å¥ã®ã³ã³ãã€ã©ãŒã§å€æŽãããå¯èœæ§ãããããããããè¡ããªãæ¹ãè¯ãã§ãã const short SPKR_DATA_INIT = (short)0x8000; if (g_nSpeakerData == (SPKR_DATA_INIT >> 2))
èŠåïŒV610ã®åäœã¯æå®ãããŠããŸããã ã·ããæŒç®åã>>ãã確èªããŠãã ããã å·Šã®ãªãã©ã³ããSPKR_DATA_INITãã¯è² ã§ãã speaker.cpp 450
çµäºïŒå®æ°SPKR_DATA_INITããã³ã¯ã¬ã¹ãšããŠå®£èšã§ããŸãã 確ãã«ãã³ã³ãã€ã©ãšã¢ãã©ã€ã¶ã笊å·ä»ã/笊å·ãªãã®æ°å€ã®æ¯èŒã«é¢ããèŠåãåãåããªãããã«ãããã«ããã€ãã®å°ããªå€æŽãè¡ãå¿ èŠããããŸãã
ã¢ãã©ã€ã¶ãŒã¯ããã®ãããªå±éºãªå Žæãããã«3ã€èŠã€ããŸããã
- å·Šã®ãªãã©ã³ããSPKR_DATA_INITãã¯è² ã§ãã speaker.cpp 453
- å·Šã®ãªãã©ã³ããã0x180ãã¯è² ã§ãã tfe.cpp 869
- å·Šã®ãªãã©ã³ã 'ã0x100'ã¯è² ã§ãã tfe.cpp 987
ãšããã§ãæåŸã®2ã€ã®èŠåã®ç·šéãéå§ãããšãã«ãããã«2ã€ã®ãšã©ãŒãèŠã€ãããŸããã ã¢ãã©ã€ã¶ãŒã¯éæ¥çãªæ¹æ³ã§ããããèŠã€ããã®ã«åœ¹ç«ã£ããšèšããŸãã
ãã¯ãã®äœ¿çšæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
SET_PP_16(TFE_PP_ADDR_SE_BUSST, busst & ~0x180);
é·ãæååã«å±éãããŸãã ãããã£ãŠããã®äžéšã®ã¿ã瀺ããŸãã
..... = (busst & ~0x180 >> 8) & 0xFF; .....
ã·ããæŒç®å>>ã®åªå 床ã¯ãïŒæŒç®åã®åªå 床ãããé«ããªã£ãŠããŸãã è¡šïŒ æäœã®åªå é äœãåç §ããŠãã ããã
ããã°ã©ãã¯ãã³ãŒãã次ã®ããã«åäœããããšãæåŸ ããŠããŸããã
..... = ((busst & ~0x180) >> 8) & 0xFF; .....
ãããå®éã«ã¯ã次ã®ããã«æ©èœããŸãã
..... = (busst & (~0x180 >> 8)) & 0xFF; .....
ããããPVS-Studioã¢ãã©ã€ã¶ãŒãèŠåããçç±ã§ãïŒãå·Šãªãã©ã³ã 'ã0x180'ã¯è² ã§ããã
ããã¯ããã¯ãã䜿çšããããšã®å±éºæ§ã§ãã
ã»ãã¥ãªãã£ããŒã«
ãã®ãããžã§ã¯ãã§ã¯ãsprintfïŒïŒãwsprintfïŒïŒé¢æ°ãªã©ãéåžžã«å±éºãªæ¹æ³ã§äœ¿çšããŠããŸãã èŠããã«ãé¢æ°ã¯æ¬¡ã®ããã«äœ¿çšãããŸãã sprintf(buf, STR);
STRæååã«ãïŒ sããªã©ã®å¶åŸ¡æåãå«ãŸããŠããå Žåãçµæã¯äºæž¬ã§ããŸããã
éåžžããã®ã³ãŒãã¯ã»ãã¥ãªãã£ããŒã«ãšèŠãªãããŸãïŒè©³çŽ°ãåç § ïŒã
ãã ãããšãã¥ã¬ãŒã¿ã«ãšã£ãŠã¯ãããã¯éèŠã§ã¯ãªããšæããŸãã 誰ã圌ãæ»æããŸããã ãã ãããã®ãããªã³ãŒãèªäœã¯å±éºã§ãã ããã°ã©ã ã®ã¯ã©ãã·ã¥ã誀åäœãç°¡åã«åŒãèµ·ããå¯èœæ§ããããŸãã
æ£ããããšã¯ïŒsprintfïŒbufã "ïŒ s"ãSTRïŒ;
ã¢ãã©ã€ã¶ãŒã¯ãå€ãã®å±éºãªé¢æ°åŒã³åºããæ€åºããŸããã åèšã§ã圌ã¯21ã®èŠåãçºè¡ããŸãã ã
å察ã®æ¡ä»¶
// TO DO: Need way of determining if DirectX init failed if (soundtype != SOUND_WAVE) { if (soundtype == SOUND_WAVE) soundtype = SOUND_SMART;
èŠåïŒV637å察ã®2ã€ã®æ¡ä»¶ãçºçããŸããã 2çªç®ã®æ¡ä»¶ã¯åžžã«falseã§ãã è¡ã確èªããŠãã ããïŒ270ã272ãspeaker.cpp 270
ã³ã¡ã³ãããå€æãããšãã³ãŒãã¯è¿œå ãããŠããŸããã ãã®ã³ãŒããã©ãããããèšãã®ã¯é£ããã§ãã 2çªç®ã®ç¡æå³ãªãifããã³ã¡ã³ãã¢ãŠãããããšã«ããŸããã
if (soundtype != SOUND_WAVE) { //if (soundtype == SOUND_WAVE) // soundtype = SOUND_SMART;
æªãã¢ã©ã€ã¡ã³ãã³ãŒã
ã³ãŒãã¯ãäž¡æ¹ã®ã¢ã¯ã·ã§ã³ãifã¹ããŒãã¡ã³ãã«é¢é£ããŠããããã«èŠããŸãã { if ((Slot4 == CT_MockingboardC) || (Slot4 == CT_Phasor)) m_PropertySheetHelper.GetConfigNew().m_Slot[4] = CT_Empty; m_PropertySheetHelper.GetConfigNew().m_Slot[5] = CT_SAM; }
èŠåïŒV640ã³ãŒãã®æäœããžãã¯ã¯ãã®ãã©ãŒãããã«å¯Ÿå¿ããŠããŸããã ã¹ããŒãã¡ã³ãã¯å³åŽã«ã€ã³ãã³ããããŸãããåžžã«å®è¡ãããŸãã äžæ¬åŒ§ãæ¬ èœããŠããå¯èœæ§ããããŸãã pagesound.cpp 229
ç§ã®ç解ã§ã¯ãã³ãŒãã«ãšã©ãŒã¯ãããŸããã ãã ããããã¯èª€æ€ç¥ã§ã¯ãããŸããã ãã®ãããªã³ãŒãã«ã€ããŠèŠåãããšããã¢ãã©ã€ã¶ãŒã¯çµ¶å¯Ÿã«æ£ããã§ãã ã¢ã©ã€ã¡ã³ããä¿®æ£ããŠãã ããïŒ
{ if ((Slot4 == CT_MockingboardC) || (Slot4 == CT_Phasor)) m_PropertySheetHelper.GetConfigNew().m_Slot[4] = CT_Empty; m_PropertySheetHelper.GetConfigNew().m_Slot[5] = CT_SAM; }
strncatïŒïŒé¢æ°ã®äžé©åãªåäœ
strncat( sText, CHC_DEFAULT, CONSOLE_WIDTH ); strncat( sText, pHelp , CONSOLE_WIDTH );
èŠåïŒV645ãstrncatãé¢æ°åŒã³åºãã¯ããsTextããããã¡ãªãŒããŒãããŒãåŒãèµ·ããå¯èœæ§ããããŸãã å¢çã«ã¯ããããã¡ãŒã®ãµã€ãºãå«ããããšã¯ã§ããŸããããä¿æã§ããæåæ°ãå«ããå¿ èŠããããŸãã debugger_help.cpp 753
é¢æ°ã®3çªç®ã®åŒæ°ã¯ãæååã«è¿œå ã§ããæåæ°ã§ãã ãããã£ãŠãããããããšã¯æ£ããå®å šã§ãã
strncat( sText, CHC_DEFAULT, sizeof(sText) - strlen(sText) - 1); strncat( sText, pHelp , sizeof(sText) - strlen(sText) - 1);
詳现ã«ã€ããŠã¯ã V645蚺æããã°ã©ã ã®èª¬æãåç §ããŠãã ãã ã
è¿œå ã®ãã§ãã¯
éåžžã«é·ãéããnewãæŒç®åã¯ãã¡ã¢ãªãå²ãåœãŠãããšãã§ããªãå Žåã«äŸå€std :: bad_allocãã¹ããŒããŸããã ãã ããããã°ã©ã ã§ã¯ãäžèŠãªãã§ãã¯ãèŠã€ããããšãã§ããŸãã BYTE* pNewImageBuffer = new BYTE [uNewImageSize]; _ASSERT(pNewImageBuffer); if (!pNewImageBuffer) return false;
èŠåïŒV668ã¯ããnewãæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããããããpNewImageBufferããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã diskimagehelper.cpp 197
_ASSERTãšæ€èšŒã¯åé€ã§ããåé€ããå¿ èŠããããŸãã ããã§ã¯æå³ããããŸããã
åæ§ã®ç¶æ³ïŒ
- mouseinterface.cpp 175
- serialcomms.cpp 839
- savestate.cpp 108
- savestate.cpp 218
- speech.cpp 40
èªå·±å®£èšã·ã¹ãã ã®ã¿ã€ã
ãããžã§ã¯ãã§ã¯ãäžè²«ããŠããã€ãã®ããŒã¿åãå®çŸ©ããŠããŸãã typedef unsigned long ULONG; typedef void *LPVOID; typedef unsigned int UINT;
ããã«ã¯æãããªãšã©ãŒã¯ãããŸããã ããã¯ãèãã®ããã³ãŒããã§ãããšæ³å®ããã³ã¡ã³ã//-V677ã䜿çšããŠèŠåãæå¶ããŸãã
ãããã°ããŒã®æ³åãã«éå
ããšãã°ãCConfigNeedingRestartã¯ã©ã¹ã§operator =ã宣èšãããŠããŸãããã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãããŸããã ããã¯ã Big Two Law ãã«éåããŸããã¯ã©ã¹ã¯ååã«å€§ããã®ã§ãããã§ã¯ã³ãŒãã®æçã瀺ããŸããã ã²ãšããš
ãã®ã¯ã©ã¹ã§ã¯ããã¹ãŠã®ãã£ãŒã«ãã¯åçŽåã§ãããããç¬èªã®æŒç®å=ã¯ãŸã£ããå¿ èŠãããŸããã ã¯ã©ã¹ã¯èªåçã«æ£åžžã«ã³ããŒãããŸãã
Disk_tã¯ã©ã¹ã§ã¯ãç¶æ³ã¯äŒŒãŠããŸãã ãã¡ãã¡ã§æŒç®å=ãåé€ã§ããŸãã
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ
- V690ãCConfigNeedingRestartãã¯ã©ã¹ã¯ã=ãæŒç®åãå®è£ ããŸãããã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒããããŸããã ãã®ãããªã¯ã©ã¹ã䜿çšããã®ã¯å±éºã§ãã config.h 7
- V690ãDisk_tãã¯ã©ã¹ã¯ã=ãæŒç®åãå®è£ ããŸãããã³ããŒã³ã³ã¹ãã©ã¯ã¿ãŒããããŸããã ãã®ãããªã¯ã©ã¹ã䜿çšããã®ã¯å±éºã§ãã disk.cpp 74
ã¿ã€ããã¹
int nHeight=nHeight=g_aFontConfig[ FONT_CONSOLE ]._nFontHeight;
èŠåïŒV700ã¯ããT foo = foo = ...ãåŒã®æ€æ»ãæ€èšããŠãã ããã å€æ°ãããèªäœã§åæåãããã®ã¯å¥åŠã§ãã debugger_display.cpp 1226
ãã ã®ã¿ã€ããã¹ã ã«çœ®ãæãïŒ
int nHeight = g_aFontConfig[ FONT_CONSOLE ]._nFontHeight;
åæã«é¢ããã¢ãã©ã€ã¶ãŒã®é床ã®æžå¿µ
'AppMode_e'åæã«ã¯ãMODE_LOGOãMODE_PAUSEDãMODE_RUNNINGãMODE_DEBUGãMODE_STEPPINGãšããååã®å®æ°ãå«ãŸããŠããŸããã¢ãã©ã€ã¶ãŒã¯ããã¹ãŠã®ã¹ã€ããããã®ã¹ã€ããã§äœ¿çšãããããã§ã¯ãªãããšãå¿é ããŠããŸãïŒïŒïŒ
switch (g_nAppMode) { case MODE_PAUSED : _tcscat(.....); break; case MODE_STEPPING: _tcscat(.....); break; }
èŠåïŒV719 switchã¹ããŒãã¡ã³ãã¯ã 'AppMode_e'åæåã®ãã¹ãŠã®å€ãã«ããŒããŸããïŒMODE_DEBUGãMODE_LOGOãMODE_RUNNINGã frame.cpp 217
ãã®äŸã§ã¯ãã¢ãã©ã€ã¶ãŒãå°ãæ¥ããŠããŸãã çµéšçã¢ã«ãŽãªãºã ã倱æããŸããã 誀æ€ç¥ã ä¿®æ£ããã«ã¯ããã€ãã®æ¹æ³ããããŸãã ããšãã°ãããã©ã«ãã®ãã©ã³ããè¿œå ã§ããŸãã
switch (g_nAppMode) { case MODE_PAUSED : _tcscat(.....); break; case MODE_STEPPING: _tcscat(.....); break; default: break; }
å¥ã®åæ§ã®èª€æ€ç¥ïŒV719 switchã¹ããŒãã¡ã³ãã¯ã 'AppMode_e'åæã®ãã¹ãŠã®å€ãã«ããŒããŸããïŒMODE_DEBUGãMODE_LOGOã frame.cpp 1210
ç§ã¯ã第3ã¬ãã«ã®èŠåãç°¡åã«ç¢ºèªããããšãçŽæããŸããã
ïŒå°ãªããšãæåã®æ®µéã§ã¯ïŒã¬ãã«3ããŸã£ããèŠãããšã¯ãå§ãããŸããã å€ãã®èª€ã£ããèå³ã®ãªãããŸãã¯ç¹å®ã®ã¡ãã»ãŒãžããããŸãã ãããç¶æ³ã§ããããšãã°ãããã«ã¯ããªãã®æ°ã®V601èŠåããããŸãã
inline int IsDebugBreakpointHit() { if ( !g_bDebugNormalSpeedBreakpoints ) return false; return _IsDebugBreakpointHit(); }
èŠåïŒV601ãfalseãå€ã¯æé»çã«æŽæ°åã«ãã£ã¹ããããŸããdebug.h 210
ãã®é¢æ°ã¯ãã¿ã€ã 'int'ãè¿ããŸãããã ãããfalseãè¿ãããšè¡šç€ºãããŸãã
ã¢ãã©ã€ã¶ãŒã¯ãã®ã³ãŒãã§é害ãèŠã€ããã®ãæ£ããã§ãããå®éã«ã¯ãããã¯å®éã®ãšã©ãŒã«ãã£ãŠéåžžã«ãŸãã«é ãããŸãããããã£ãŠããã®èŠåã¯ã¬ãã«3ã«äœäžããŸããã
ç¹å®ã®èšºæã®äŸïŒ
double g_fClksPerSpkrSample; .... if ((double)g_nRemainderBufferSize != g_fClksPerSpkrSample)
èŠåïŒV550å¥åŠãªæ£ç¢ºãªæ¯èŒãfabsïŒA-BïŒ> Epsilonã®ããã«ãå®çŸ©ããã粟床ã®æ¯èŒã䜿çšããæ¹ãããããè¯ãã§ããããspeaker.cpp 197
ãã®ã³ãŒããæå¹ã§ãããã©ããã¯ãã¢ããªã±ãŒã·ã§ã³ãšãdoubleãåã®å€æ°ã«é 眮ãããå€ã«å€§ããäŸåããŸãã
å€ãã®ãŠãŒã¶ãŒããã®èšºæãåãã§ããŸããä»ã®äººã¯ãæŽæ°ãdoubleã«å ¥ããŠãæ¯èŒæã«äœãããããç¥ã£ãŠãããšèšããŸããããªãã¯çãåã°ããŸããã
ãšã©ãŒç·šéåŸã«å®è¡
ãã¹ãŠã®ã¡ãã»ãŒãžïŒã¬ãã«1ããã³2ïŒãä¿®æ£ããããã¢ãã©ã€ã¶ãŒãåèµ·åã§ããŸããçµæãæåŸ ãããŸã-ãã¹ãŠã®èŠåãæ¶ããŸããïŒå³6ãåç §ïŒãå³6.ã¬ãã«1ããã³ã¬ãã«2ã®ã¢ã©ãŒãã¯ãããããŸããã
ããã¯ãå°èŠæš¡ãããžã§ã¯ãã«ã®ã¿é©çšã§ããçæ³çãªãªãã·ã§ã³ã§ããããã§ããã¢ãã©ã€ã¶ãŒã¡ãã»ãŒãžãæäœããã®ã«è€éãªãã®ã¯äœããªãããšã瀺ãããšãã§ãããšæããŸããäžéšã®ã¡ãã»ãŒãžã¯èª€ã£ãŠããŸãããããããã«åé¡ã¯ãªãããããã¯ãã¹ãŠæé€ãããŸããã
ãŸãšãããš
å€ãã®å Žåãã¢ãã©ã€ã¶ãŒãçæãã誀æ€ç¥ã®æ°ãå°ããããŸããçãã¯ãããŸããããã®ãããªçµ±èšãåéããããšã¯éåžžã«å°é£ã§ãããã»ãšãã©å¹æã¯ãããŸããã誀æ€ç¥ã®æ°ã¯ããããžã§ã¯ãã«ãã£ãŠå€§ããç°ãªããŸããããŒã¿ã®è§£éã«ã¯ãŸã åé¡ããããŸããããšãã°ããããžã§ã¯ãå šäœã§ã¢ã¯ãã£ãã«äœ¿çšãããŠãããã¯ãã倱æããããã誀æ€ç¥ã®æ°ã¯æçšãªã¡ãã»ãŒãžã®20åã«ãªããŸããããããããã¯åé¡ã§ã¯ãããŸããããã®ãã¯ãã§èŠåãæå¶ããã ãã§ååã§ããã誀ã£ãã¡ãã»ãŒãžã®æ°ã¯ããã«90ïŒ æžå°ããŸãã
次ã«çããé£ããã¯ãããã°ã©ããŒãèŠåãåé¡ããã®ãé£ããããšãèæ ®ããŠããªãããšã§ãããããã®ã¡ãã»ãŒãžã¯ãšã©ãŒãæ€åºããŸãããããèãã®ããã³ãŒãããæããã«ããŸãããã®ãããªã³ãŒãã¯ä¿®æ£ããå¿ èŠããããŸããçŸåšã¯æ£åžžã«åäœããŠããŸãããå°æ¥çã«ã¯æ¬ é¥ãåŒãèµ·ããå¯èœæ§ãããããã§ãããã®èšäºã§ã¯ããã®ãããªèšºæã®äŸãããã€ã瀺ããŸããã
ããããããã°ã©ããŒã¯ãã€ããªããžãã¯ã«åŒãå¯ããããŸãããããŠã圌ãã¯çããåãåãããšã䞻匵ããŸãïŒãããã¯ééã£ãã¡ãã»ãŒãžã§ããïŒã¯ã/ãããïŒãèšäºã泚ææ·±ãèªãã§ããã ããã°ã質åãããã»ã©å³å¯ã«æèµ·ããªãããšãé¡ã£ãŠããŸãã
ã芧ã®ãšããã誀æ€ç¥ã®æ°ã«ã€ããŠäžè¬çã«è©±ãããšã¯å°é£ã§ããããããç¹å®ã®å°ããªãããžã§ã¯ããåãäžããå Žåã¯ããã®ããã ãã«çããåºãããšãã§ããŸãã
PVS-Studioã¢ãã©ã€ã¶ãŒã«ãã£ãŠçºè¡ãããWindowsãããžã§ã¯ãçšã®Apple IIãšãã¥ã¬ãŒã¿ãŒã®èšºæã¡ãã»ãŒãžã®èŠçŽïŒ
- çºè¡ãããã¡ãã»ãŒãžã®ç·æ°ïŒäžè¬åæã第1ã¬ãã«ããã³ç¬¬2ã¬ãã«ïŒïŒ81
- èŠã€ãã£ããšã©ãŒïŒ57
- ä¿®æ£ãã¹ããåãã®ããã³ãŒããã®æçãèŠã€ãããŸããïŒ9
- 誀æ€ç¥ïŒ15
- ãšã©ãŒã瀺ãã¡ãã»ãŒãžïŒ70ïŒ
- ãã©ããã¢ã©ãŠã³ãã³ãŒããã瀺ãã¡ãã»ãŒãžïŒ11ïŒ
- 誀æ€ç¥ïŒ19ïŒ
ãããã«
ãããžã§ã¯ãã§PVS-Studioéçã¢ãã©ã€ã¶ãŒãè©ŠããŠãã ããããã¢ããŒãžã§ã³ã¯ãhttp ïŒ//www.viva64.com/en/pvs-studio-download/ããããŠã³ããŒãã§ããŸãããŸããååãå人ã«éçã¢ãã©ã€ã¶ãŒãè©Šãããšããå§ãããŸããTwitterãŸãã¯ä»ã®ãã¥ãŒã¹ãã£ãŒãã«ã¡ãã»ãŒãžãæžããŠãã ãããããããšã
PSç§ã®Twitterã賌èªããã°ãæ°ããèšäºããã©ããŒããäžè¬çã«C / C ++ã®äžçãããã¥ãŒã¹ãåŠã¶ããšãã§ããŸãïŒhttps : //twitter.com/Code_Analysis
ãæž èŽããããšãããããŸããã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒAndrey karpovãéçã³ãŒãã¢ãã©ã€ã¶ãŒããããžã§ã¯ãã«çµ±åããçæ³çãªæ¹æ³ã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã