å®éããã®è匱æ§ã®åå ã¯ãéåžžã®ã¿ã€ããã¹ã§ãã£ãŠããã»ãšãã©ãã¹ãŠã®ã¿ã€ãã®ãšã©ãŒã§ããå¯èœæ§ããããŸãã å®éãèŠã€ãã£ããšã©ãŒãCommon Weakness Enumerationã«åŸã£ãŠåé¡ãããŠããå Žåãæœåšçãªè匱æ§ãæå³ããŠããŸãã
ããŒãžã§ã³6.21以éãPVS-Studioã¢ãã©ã€ã¶ãŒã¯ãCommon Weakness Enumerationã«åŸã£ãŠæ€åºããããšã©ãŒãåé¡ãã察å¿ããCWE IDãå²ãåœãŠãããšãåŠç¿ããŸããã
ããããèªè ã¯ã以åã®èšäºã§èŠåçªå·Vxxxã«å ããŠãCWE IDãæäŸããŠããããšã«ãã§ã«æ°ä»ããŠããã§ãããã ããã¯ãåè¿°ã®ãšã©ãŒãçè«çã«è匱æ§ãåŒãèµ·ããå¯èœæ§ãããããšãæå³ããŸãã ããã®å¯èœæ§ã¯å°ããã§ãããããã§ãã èå³æ·±ãããšã«ãPVS-Studioã«ãã£ãŠçºè¡ãããã»ãŒãã¹ãŠã®èŠåãš1ã€ãŸãã¯å¥ã®CWE IDãäžèŽãããããšãã§ããŸããã ã€ãŸããèªåã§èšç»ããããšãªããå€æ°ã®åŒ±ç¹ãæ€åºã§ããã¢ãã©ã€ã¶ãŒãäœæãããšããããšã§ã:)ã
ãããã« PVS-Studioã¢ãã©ã€ã¶ãŒã¯ãå€ãã®çš®é¡ã®è匱æ§ãäºåã«é²ãã®ã«åœ¹ç«ã¡ãŸãã ãã®ãããã¯ã«é¢ããåºçç©ïŒã PVS-Studioã¯è匱æ§ã®æ€çŽ¢ã«ã©ã®ããã«åœ¹ç«ã¡ãŸããïŒ ãã
ãã®èšäºã§ã¯ãã»ãã¥ãªãã£ã®åé¡ã«ã€ãªããå¯èœæ§ã®ãããšã©ãŒããŸãšããŸããã ãšã©ãŒã®éžæã¯éåžžã«æ¡ä»¶ä»ãã§äž»èŠ³çã§ããããšãèŠåããŸãã ããçš®ã®è匱æ§ã¯ã以åã®èšäºã®1ã€ã§ããããªã¿ã€ããã¹ãšåŒãã ãšã©ãŒãšããŠåœè£ ãããŠããããšãããããŸãã
ããã§ã¯ãChromiumãããžã§ã¯ãçšã«PVS-Studioã«ãã£ãŠçºè¡ãããã¬ããŒãã®è§£æäžã«æ°ã¥ããã»ãã¥ãªãã£äžã®æ¬ é¥ãèŠãŠã¿ãŸãããã å ¥éèšäºã§æžããããã«ãã¬ããŒããéåžžã«æµfluentã«èŠãã®ã§ãæ°ã¥ããŠããªãä»ã®ãšã©ãŒããããããããŸããã ãã®èšäºã®ç®çã¯ãããã€ãã®ãšã©ãŒããããã°ã©ã ãäžæ£ç¢ºãŸãã¯æªæ€èšŒã®ããŒã¿ã®åŠçãéå§ãããšããäºå®ã«ã©ã®ããã«ã€ãªãããã瀺ãããšã§ãã ãã®ãããªããŒã¿ã«ååãä»ããæè¯ã®æ¹æ³ã¯ãŸã 決ãŸã£ãŠããªãã®ã§ãä»ã®ãšããã¯ãåœããŒã¿ããšããçšèªã䜿çšããŸãã
ãšã©ãŒã®äŸ
Chromiumãããžã§ã¯ãã
InstallUtil::ConditionalDeleteResult InstallUtil::DeleteRegistryValueIf(....) { .... ConditionalDeleteResult delete_result = NOT_FOUND; .... if (....) { LONG result = key.DeleteValue(value_name); if (result != ERROR_SUCCESS) { .... delete_result = DELETE_FAILED; } delete_result = DELETED; } return delete_result; }
PVS-StudioèŠåïŒ V519 CWE-563 'delete_result'å€æ°ã«ã¯é£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ381ã383ãinstall_util.cc 383
é¢æ°ã¯ç¡å¹ãªã¹ããŒã¿ã¹ãè¿ããŸãã ãã®çµæãããã°ã©ã ã®ä»ã®éšåã¯ãé¢æ°ãç¹å®ã®å€ãæ£åžžã«åé€ãããšæ³å®ããŸãã ãšã©ãŒã¯ãã¹ããŒã¿ã¹DELETE_FAILEDãåžžã«ã¹ããŒã¿ã¹DELETEDã«çœ®ãæããããããšã§ãã
ãšã©ãŒã¯ã elseããŒã¯ãŒããè¿œå ããããšã§ä¿®æ£ã§ããŸãã
if (result != ERROR_SUCCESS) { .... delete_result = DELETE_FAILED; } else { delete_result = DELETED; }
ãããããèæ ®ããããšã©ãŒã¯ã誀ã£ãããŒã¿ã®æ¬è³ªãããŸãããåæ ããŠããŸããã ãã®æ©èœã§ã¯ãåœã®ããŒã¿ã®äœæãè¡ãããæ€èšŒã䜿çšã¯è¡ãããŸããã ããã§ã¯ãããé©åãªå¥ã®ãšã©ãŒãèŠãŠã¿ãŸãããã
PDFiumã©ã€ãã©ãªïŒChromiumã§äœ¿çšïŒã
CPVT_WordRange Intersect(const CPVT_WordRange& that) const { if (that.EndPos < BeginPos || that.BeginPos > EndPos || EndPos < that.BeginPos || BeginPos > that.EndPos) { return CPVT_WordRange(); } return CPVT_WordRange(std::max(BeginPos, that.BeginPos), std::min(EndPos, that.EndPos)); }
PVS-Studioã®èŠåïŒ
- V501 CWE-570ã||ãã®å·ŠåŽãšå³åŽã«åäžã®å¯æ¬¡åŒãthat.BeginPos> EndPosãããããŸãã æŒç®åã cpvt_wordrange.h 46
- V501 CWE-570ã||ãã®å·ŠåŽãšå³åŽã«åäžã®å¯æ¬¡åŒãthat.EndPos <BeginPosãããããŸãã æŒç®åã cpvt_wordrange.h 46
æ¡ä»¶ã®ã¹ãã«ãééã£ãŠããŸãã ãšã©ãŒã«æ°ä»ããããããããã«ãæ¡ä»¶ãæžãããŸãã
if (E2 < B1 || B2 > E1 || E1 < B2 || B1 > E2)
ïŒE2 <B1ïŒãšïŒB1> E2ïŒã¯åäžã§ããããšã«æ³šæããŠãã ããã åæ§ã«ïŒB2> E1ïŒãããã¯ïŒE1 <B2ïŒãšåãã§ãã
å¿ èŠãªãã¹ãŠã®ãã§ãã¯ãå®è¡ãããããã§ã¯ãªããééã£ãç¯å²ãçæãããå¯èœæ§ãããããã®çµæãããã°ã©ã ã®æ©èœã«åœ±é¿ããããšãããããŸãã
次ã«ãRE2æ£èŠè¡šçŸã©ã€ãã©ãªïŒChromiumã§äœ¿çšïŒã®å€§ããè€éãªã³ãŒããèŠãŠã¿ãŸãããã æ£çŽã«èšããšãããã§äœãèµ·ãã£ãŠããã®ãããããããŸããããã³ãŒãã«ééããªãç°åžžãªãã§ãã¯ããããŸãã
ãŸããããã€ãã®åãã©ã®ããã«å®£èšãããŠãããã瀺ããŸãã ãããè¡ãããªãå Žåãã³ãŒãã¯ããŸãæ確ã«ãªããŸããã
typedef signed int Rune; enum { UTFmax = 4, Runesync = 0x80, Runeself = 0x80, Runeerror = 0xFFFD, Runemax = 0x10FFFF, };
ãããŠä»ãç°åžžãæã€æ©èœã
char* utfrune(const char *s, Rune c) { long c1; Rune r; int n; if(c < Runesync) /* not part of utf sequence */ return strchr((char*)s, c); for(;;) { c1 = *(unsigned char*)s; if(c1 < Runeself) { /* one byte rune */ if(c1 == 0) return 0; if(c1 == c) // <= return (char*)s; s++; continue; } n = chartorune(&r, s); if(r == c) return (char*)s; s += n; } return 0; }
PVS-Studioã¢ãã©ã€ã¶ãŒã¯ãã³ã¡ã³ãã// <=ãã§ã¡ã¢ããè¡ã«èŠåãçæããŸãã ã¡ãã»ãŒãžïŒ V547 CWE-570åŒ 'c1 == c'ã¯åžžã«falseã§ãã rune.cc 247
æ¡ä»¶ãåžžã«åœã§ããçç±ãç解ããŠã¿ãŸãããã ãŸãã次ã®è¡ã«æ³šæããŠãã ããã
if(c < Runesync) return strchr((char*)s, c);
å€æ°c <0x80ã®å Žåãé¢æ°ã¯äœæ¥ãåæ¢ããŸãã é¢æ°ãåŠçãå®äºããã«ç¶è¡ããå Žåãå€æ°c> = 0x80ã§ããããšã確èªã§ããŸãã
次ã«ãæ¡ä»¶ãèŠãŠã¿ãŸãããã
if(c1 < Runeself)
ã³ã¡ã³ãã// <=ãã§ããŒã¯ãããæ¡ä»¶ïŒc1 == cïŒã¯ ã c1 <0x80ã®å Žåã«ã®ã¿æºããããŸãã
ãããã£ãŠãå€æ°å€ã«ã€ããŠç¥ã£ãŠããããšã¯æ¬¡ã®ãšããã§ãã
- c> = 0x80
- c1 <0x80
ãããã£ãŠãæ¡ä»¶c1 == cã¯åžžã«falseã§ãã ããããããã¯éåžžã«çãããã§ãã æ£èŠè¡šçŸã©ã€ãã©ãªã®utfruneé¢æ°ãèšç»ã©ããã«æ©èœããªãããšãããããŸããã ãã®ãããªãšã©ãŒã®çµæã¯äºæž¬ã§ããŸããã
LibVPXãããªã³ãŒããã¯ïŒChromiumã§äœ¿çšïŒã
#define VP9_LEVELS 14 extern const Vp9LevelSpec vp9_level_defs[VP9_LEVELS]; typedef enum { .... LEVEL_MAX = 255 } VP9_LEVEL; static INLINE int log_tile_cols_from_picsize_level( uint32_t width, uint32_t height) { int i; const uint32_t pic_size = width * height; const uint32_t pic_breadth = VPXMAX(width, height); for (i = LEVEL_1; i < LEVEL_MAX; ++i) { if (vp9_level_defs[i].max_luma_picture_size >= pic_size && vp9_level_defs[i].max_luma_picture_breadth >= pic_breadth) { return get_msb(vp9_level_defs[i].max_col_tiles); } } return INT_MAX; }
PVS-Studioã®èŠåïŒ
- V557 CWE-119é åãªãŒããŒã©ã³ãå¯èœã§ãã ãiãã€ã³ããã¯ã¹ã®å€ã¯254ã«éããå¯èœæ§ããããŸããvp9_encoder.h 931
- V557 CWE-119é åãªãŒããŒã©ã³ãå¯èœã§ãã ãiãã€ã³ããã¯ã¹ã®å€ã¯254ã«éããå¯èœæ§ããããŸããvp9_encoder.h 932
- V557 CWE-119é åãªãŒããŒã©ã³ãå¯èœã§ãã ãiãã€ã³ããã¯ã¹ã®å€ã¯254ã«éããå¯èœæ§ããããŸããvp9_encoder.h 933
vp9_level_defsé åã¯14åã®èŠçŽ ã§æ§æãããŠããŸãã ã«ãŒãã§ã¯ãé åã®ã€ã³ããã¯ã¹ãšããŠäœ¿çšãããå€æ°iã0ãã254ã«å€ãããŸããçµæïŒé åã¯å¢çãè¶ããŸãã
ãŸãããã®ã³ãŒããã¢ã¯ã»ã¹éåã«ã€ãªããå Žåã¯ã ããããå®éã«ã¯ãã»ãšãã©ã®å Žåã vp9_level_defsé åã®åŸã«ããã©ã³ãã ããŒã¿ã®åŠçãéå§ãããŸãã
SQLiteã©ã€ãã©ãªïŒChromiumã§äœ¿çšïŒã§ãé åå€ã®ããŒã¿ã䜿çšããå¥ã®åæ§ã®ãšã©ãŒãçºçããŸããã
ãŸãã yy_shift_ofsté åã«ã¯455åã®èŠçŽ ãå«ãŸããŠããããšã«æ³šæããŠãã ããã
static const short yy_shift_ofst[] = { /* 0 */ 355, 888, 1021, 909, 1063, 1063, 1063, 1063, 20, -19, .... /* 450 */ 1440, 1443, 1538, 1542, 1562, }
2ã€ã®ãã¯ããéèŠã§ãã
#define YY_SHIFT_COUNT (454) #define YY_MIN_REDUCE 993
YY_SHIFT_COUNTãã¯ãã¯ã yy_shift_ofsté åã®èŠçŽ ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšã§ããæ倧ã€ã³ããã¯ã¹ãå®çŸ©ããŸãã èŠçŽ ã®çªå·ã¯0ããå§ãŸãããã455ã§ã¯ãªã454ã§ãã
ãã¯ãYY_MIN_REDUCEã¯993ã«çããã yy_shift_ofsté åã®ãµã€ãºãšã¯é¢ä¿ãããŸããã
匱ãæ€èšŒãå«ãé¢ââæ°ïŒ
static unsigned int yy_find_shift_action(....) { int i; int stateno = pParser->yytos->stateno; if( stateno>=YY_MIN_REDUCE ) return stateno; // <= assert( stateno <= YY_SHIFT_COUNT ); do { i = yy_shift_ofst[stateno]; // <= .... }
PVS-StudioèŠåïŒV557 CWE-125ã¢ã¬ã€ã®ãªãŒããŒã©ã³ãçºçããå¯èœæ§ããããŸãã 'stateno'ã€ã³ããã¯ã¹ã®å€ã¯992ã«éããå¯èœæ§ããããŸããsqlite3.c 138802
é¢æ°ã¯ãé åã«ã¢ã¯ã»ã¹ãããšãã®ã€ã³ããã¯ã¹ãç¹å®ã®å€ãè¶ ããªãããã«ä¿è·ãããŠããŸãã å ¥åãã¹ã®ããããŸãã¯å¥ã®çç±ã§ãééã£ãå®æ°ã䜿çšãããŠããŸãã å®æ°454ã䜿çšããå¿ èŠããããŸããã代ããã«ã€ã³ããã¯ã¹å€ã993ãšæ¯èŒãããŸãã
ãã®çµæãæµ·å€ã®ã¢ã¬ã€ã«ã¢ã¯ã»ã¹ããä»»æã®åœããŒã¿ãèªã¿åãããšãã§ããŸãã
ã泚æ 以äžã«æ£ããassertã瀺ããŸããããªãªãŒã¹ããŒãžã§ã³ã§ã¯åœ¹ã«ç«ã¡ãŸããã
ã»ãšãã©ã®å Žåããã§ãã¯ã¯æ¬¡ã®ããã«æžãæããå¿ èŠããããŸãã
if (stateno > YY_SHIFT_COUNT) { assert(false); return stateno; }
ICUãããžã§ã¯ãïŒChromiumã§äœ¿çšïŒã
UVector* ZoneMeta::createMetazoneMappings(const UnicodeString &tzid) { UVector *mzMappings = NULL; .... if (U_SUCCESS(status)) { .... if (U_SUCCESS(status)) { .... while (ures_hasNext(rb)) { .... if (mzMappings == NULL) { mzMappings = new UVector( deleteOlsonToMetaMappingEntry, NULL, status); if (U_FAILURE(status)) { delete mzMappings; uprv_free(entry); break; } } .... } .... } } ures_close(rb); return mzMappings; }
PVS-StudioèŠåïŒ V774 CWE-416ã¡ã¢ãªã解æŸãããåŸããmzMappingsããã€ã³ã¿ãŒã䜿çšãããŸããã zonemeta.cpp 713
ã³ãŒãã¯è€éã§ããããã«æ¬åœã®ééãããããã©ããã確å®ã«èšãã®ã¯é£ãããšæããŸãã ããããç§ãç解ããŠããããã«ãé¢æ°ãæ¢ã«è§£æŸãããã¡ã¢ãªãããã¯ãžã®ãã€ã³ã¿ãè¿ãå Žåãç¶æ³ã¯å¯èœã§ãã æ£ããç¡å¹ãªã¹ããŒã¿ã¹ãã³ãã©ã¯ããã€ã³ã¿ãç¡å¹ã«ããå¿ èŠããããŸãã
if (U_FAILURE(status)) { delete mzMappings; mzMappings = nullptr; uprv_free(entry); break; }
ããã§ãé¢æ°ã解æŸãããã¡ã¢ãªãžã®ãã€ã³ã¿ãè¿ããããšãããããŸããã ãã®ã¡ã¢ãªã¯äœã§ãæ§ããŸããããã®ç¡å¹ãªãã€ã³ã¿ã䜿çšãããšãããã°ã©ã ã®åäœãæªå®çŸ©ã«ãªããŸãã
Chromiumãããžã§ã¯ãã®æ¬¡ã®æ©èœã¯ãè² ã®å€ã«å¯Ÿããä¿è·ã誀ã£ãŠå®è£ ããŠããŸãã
void AXPlatformNodeWin::HandleSpecialTextOffset(LONG* offset) { if (*offset == IA2_TEXT_OFFSET_LENGTH) { *offset = static_cast<LONG>(GetText().length()); } else if (*offset == IA2_TEXT_OFFSET_CARET) { int selection_start, selection_end; GetSelectionOffsets(&selection_start, &selection_end); if (selection_end < 0) *offset = 0; *offset = static_cast<LONG>(selection_end); } }
PVS-StudioèŠåïŒV519 CWE-563ã*ãªãã»ãããå€æ°ã«ã¯ãé£ç¶ããŠ2åå€ãå²ãåœãŠãããŸãã ããããããã¯ééãã§ãã è¡ã確èªããŠãã ããïŒ3543ã3544ãax_platform_node_win.cc 3544
selection_endå€æ°ã®å€ãè² ã®å Žåãé¢æ°ã¯0ãè¿ããŸã ã ãã ããã¿ã€ããã¹ã«ããã 0ã¯æ£ããå Žæã«æžã蟌ãŸããŸããã æ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
if (selection_end < 0) selection_end = 0; *offset = static_cast<LONG>(selection_end);
ãã®ãšã©ãŒã«ãããé¢æ°ã¯è² ã®æ°ãè¿ãããšããããŸãããããã§ã¯ãããŸããã ããã¯è² ã®æ°ã§ããããã§ãã¯ãéããŠãæŒãããå¯èœæ§ããããäžæ£ç¢ºãªããŒã¿ããããŸãã
ãã®ä»ã®ãã°
æ£çŽã«èšããšããã®èšäºã®åã®ã»ã¯ã·ã§ã³ã§æããäŸã¯ããŸã奜ãã§ã¯ãããŸããã ãããã®ããã€ãã¯ãããŸããã誀ã£ãããŒã¿ã䜿çšããéã®ãšã©ãŒã®æ¬è³ªãããŸãããåæ ããŠããŸããã æéãçµã€ã«ã€ããŠããšã©ãŒã®ããé®®æãªäŸã瀺ããããŸããŸãªãªãŒãã³ãããžã§ã¯ããããšã©ãŒãåéããå¥ã®èšäºãäœæãããšæããŸãã
ã¡ãªã¿ã«ããã®èšäºã«ã¯ãã£ãšå€ãã®ãšã©ãŒã®äŸãå«ããããšãã§ããŸããã以åã®èšäºãæžããŠãããšãã«ãã§ã«ããããã䜿ãåã£ããã®ã§ãããç¹°ãè¿ããããšã¯æããŸããã ããšãã°ããChromiumïŒtyposããšããèšäºã«ã¯ã次ã®ãããªæçããããŸããã
if(!posX->hasDirtyContents() || !posY->hasDirtyContents() || !posZ->hasDirtyContents() || !negX->hasDirtyContents() || !negY->hasDirtyContents() || // <= !negY->hasDirtyContents()) // <=
ãã®ã¿ã€ããã¹ã®ããã negZãã€ã³ã¿ãŒã«ãã£ãŠåç §ããããªããžã§ã¯ãã¯ãã§ãã¯ãããŸããã ãã®çµæãããã°ã©ã ã¯èª€ã£ãããŒã¿ãåŠçããŸãã
ãŸãããã®èšäºã§ã¯ã mallocé¢æ°ãè¿ããã€ã³ã¿ãŒãã§ãã¯ããªãããã«äžæ£ç¢ºãªïŒç ŽæããïŒããŒã¿ãçºçããç¶æ³ã«ã€ããŠã¯èæ ®ããŸããã§ããã mallocé¢æ°ã NULLã è¿ãå Žåãããã¯NULLãã€ã³ã¿ãŒã®éåç §ã®ãšã©ãŒã®ã¿ãå¯èœãªããšãæå³ãããã®ã§ã¯ãããŸããã ãã£ãšé°æ¹¿ãªç¶æ³ããããŸãã æŠç¥çã«ã¯ã次ã®ããã«ãªããŸãã
int *ptr = (int *)malloc(100 * sizeof(int)); ptr[1234567] = 42;
nullãã€ã³ã¿ãŒã®éåç §ã¯ãããŸããã ããã§ã¯ããŒã¿ãèšé²ãããŸãããã©ãã§ããŒã¿ãç Žå£ããããã¯æ確ã§ã¯ãããŸããã
ããã¯èå³æ·±ã話ã§ããã次ã®å¥ã®èšäºã«å°å¿µããŸãã
æšå¥šäºé
ããŸããŸãªãšã©ãŒãçºçãããšãä¿¡é Œæ§ã®äœãïŒæªæ€èšŒãç ŽæããïŒããŒã¿ãåºçŸããŠäœ¿çšãããŸãã ããã«æ®éçãªã¢ããã€ã¹ã¯ãããŸããã ãã¡ããã次ã®ããã«èšè¿°ã§ããŸããã³ãŒããééããªãã§ãã ããïŒ ãããããã®ãããªã¢ããã€ã¹ã«ã¯æå³ããããŸãã:)ã
ã§ã¯ããªããã®èšäºãæžããŠãã®ã¿ã€ãã®ãšã©ãŒã匷調ããã®ã§ããïŒ
ããªãã¯ãããã«ã€ããŠç¥ã£ãŠããŸãã åé¡ã®ååšèªäœãç¥ãããšã¯ããããé²ãã®ã«åœ¹ç«ã¡ãŸãã 誰ããåé¡ã«ã€ããŠç¥ããªãå Žåãããã¯ããã«ãªããšããæå³ã§ã¯ãããŸããã ãã®åçã¯è¯ãäŸã§ãïŒ
ãŸã ã¢ããã€ã¹ã§ããããšïŒ
- ãããžã§ã¯ãã§äœ¿çšãããŠããã©ã€ãã©ãªãæŽæ°ããŸãã æ°ããããŒãžã§ã³ã§ã¯ãè匱æ§ã§ããããŸããŸãªãšã©ãŒãä¿®æ£ã§ããŸãã ãã ãããã®è匱æ§ã¯æ°ããããŒãžã§ã³ã ãã§ãªãå€ãããŒãžã§ã³ã«ãçŸããå¯èœæ§ãããããšãèªããå¿ èŠããããŸãã ããã§ããããè¯ã解決çã¯ã©ã€ãã©ãªãã¢ããã°ã¬ãŒãããããšã§ãã æ°ããè匱æ§ãããå€ãè匱æ§ã«ã€ããŠå€ãã®äººãç¥ã£ãŠããŸãã
- ãã¹ãŠã®å ¥åãç¹ã«å€éšããã®å ¥åãæ éã«ç¢ºèªããŠãã ããã ããšãã°ããããã¯ãŒã¯äžã®ã©ããããæ¥ããã¹ãŠã®ããŒã¿ã¯ãéåžžã«æ éã«ãã§ãã¯ããå¿ èŠããããŸãã
- ããŸããŸãªã³ãŒãæ€èšŒããŒã«ã䜿çšããŸãã ããšãã°ãChromiumãããžã§ã¯ãã«ã¯PVS-Studioéçã¢ãã©ã€ã¶ãŒã®äœ¿çšãæããã«æ¬ ããŠããŸã:)ã
- ååã«ã åçŽãªã³ãŒãã£ã³ã°ãšã©ãŒãããã»ã©æãã®ãªããšã©ãŒã§ã¯ãªã ãããšã説æããŸãã ããŒã ã責任ããã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåã¯ãã³ãŒãã®å質ã«çŠç¹ãåœãŠãç¡å®³ã«èŠãããšã©ãŒãå«ããŠãã¹ãŠãç Žå£ããå¿ èŠããããŸãã
PVS-Studioã«é¢ãã泚æ
åè¿°ããããã«ãPVS-Studioã¢ãã©ã€ã¶ãŒã¯ãã³ãŒãã®èšè¿°æ®µéã§ããšã©ãŒãæ€åºããããšã«ããããã§ã«è匱æ§ãé²ãã®ã«åœ¹ç«ã¡ãŸãã ããããç§ãã¡ã¯ããã«å€ããæã¿ããæªæ€èšŒã®ããŒã¿ã䜿çšããããšããæŠå¿µãããŒã¿ãããŒåæã«å°å ¥ããããšã§ãPVS-StudioããŸããªãçå£ã«æ¹åããŸãã
ãã®éèŠãªèšºæã®ããã«ãV1010ãšããç¹å¥ãªçªå·ããã§ã«äºçŽããŠããŸãã 蚺æã䜿çšãããšãä¿¡é Œæ§ã®äœããœãŒã¹ïŒããšãã°ããããã¯ãŒã¯çµç±ã§éä¿¡ãããïŒããããŒã¿ãåä¿¡ããé©åãªæ€èšŒãªãã§äœ¿çšããå Žåã®ãšã©ãŒãèå¥ã§ããŸãã å€ãã®å Žåãå¿ èŠãªãã¹ãŠã®å ¥åãã§ãã¯ã®æ¬ åŠãã¢ããªã±ãŒã·ã§ã³ã®è匱æ§æ€åºã®åå ã§ãã ããã«ã€ããŠã¯ãæè¿èšäºã PVS-Studio 2018ïŒCWEãJavaãRPGãmacOSãKeilãIARãMISRA ãã§è©³ãã説æããŸããïŒã»ã¯ã·ã§ã³ãæœåšçãªè匱æ§ãCWEããåç §ïŒã
æ°ãã蚺æã«ãããæœåšçãªè匱æ§ãç¹å®ããã¢ãã©ã€ã¶ãŒãå€§å¹ ã«åŒ·åãããŸãã ã»ãšãã©ã®å ŽåãV1010ã®èšºæã¯èå¥åCWE-20 ïŒäžé©åãªå ¥åæ€èšŒïŒã«å¯Ÿå¿ããŸãã
ãããã«
ããªããšããªãã®ååã«ãç§ãã¡ã®ãŠã§ããµã€ãã®èšäºã 42ã®æšå¥šäºé ããèªãããšãå§ããŸãã ãã®åŸãããã°ã©ãã¯ã»ãã¥ãªãã£ã®å°é家ã«ãªãããšã¯ãããŸããããå€ãã®æ°ããæçšãªæ å ±ãåŠã³ãŸãã ç¹ã«ããããã®èšäºã¯ãCèšèªãŸãã¯C ++èšèªãç¿åŸããã°ããã§ããŠãµã®ã®ç©Žãã©ãã ãæ·±ãæãäžããããŠããããçããªãéçºè ã«ãšã£ãŠæçšã§ãã
42ã®ãã³ããæŽæ°ãããããã50ã®ãã³ãã«å€ããäºå®ã§ãã ãããã£ãŠããã®Twitterã®ãã®ä»ã®èå³æ·±ãèšäºãèŠéããªãããã«ãTwitter @Code_AnalysisãšRSSãã£ãŒãã賌èªããããšããå§ãããŸãã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒAndrey Karpovã ChromiumïŒä¿¡é Œã§ããªãããŒã¿ã®äœ¿çš ã