ãã®ããã¹ãã¯ãPVS-Studioéçã³ãŒãã¢ãã©ã€ã¶ãŒã䜿çšããChromiumãããžã§ã¯ãã®æ¬¡ã®æ€èšŒã«é¢ããèšäºã·ãªãŒãºã®å§ãŸãã§ãã ãã®èšäºã§ã¯ãããŸããŸãªãšã©ãŒãã¿ãŒã³ã調ã¹ãã³ãŒãå
ã§ãšã©ãŒãçºçããå¯èœæ§ãæžããããã®æšå¥šäºé
ãææ¡ããŸãã ãã ããéå§ããåã«ãããã€ãã®è³ªåã«äºåã«åçããäžçš®ã®çŽ¹ä»æãäœæããå¿
èŠããããŸãããŸããäžé£ã®èšäºã®çµãããåŸ
ããã«ä¿®æ£ãéå§ããå¯èœæ§ã®ãããã¹ãŠã®ãã°ãChromiuméçºè
ã«æäŸããå¿
èŠããããŸãã
èæ¯
ç§ã®ååã¯ã¢ã³ãã¬ã€ã»ã«ã«ããã§ããç§ã¯éç解æå
šè¬ãç¹ã«PVS-Studioéç解æããŒã«ã®äŒéè
ã§ãã ãã ãããæè¡çäŒéè
ããšããçšèªã¯ãã§ã«å»æ¢ãããŠããããéçºè
æ¯æè
ããããã«åã£ãŠä»£ããã€ã€ãããŸãã
ç§ã¯ã³ãŒãã®å質ã®åäžãšããã°ã©ã ã®ä¿¡é Œæ§ã®åäžã«è³æãæžãã®ã«å€ãã®æéãè²»ãããŠããŸãã ããã§ããã®ãããã¯ã«é¢ããããã€ãã®èšäºãæžãæ°ããçç±ããããŸããPVS-Studioã¢ãã©ã€ã¶ãŒã䜿çšããŠãéããŠãã
Chromiumãããžã§ã¯ãããã§ãã¯ããŸãã ããã¯å€§èŠæš¡ãªãããžã§ã¯ãã§ãããããŸããŸãªçš®é¡ã®ãã°ã倧èŠæš¡ãªãããžã§ã¯ãã«ååšããŸãã ãã®å€æ§æ§ã«ããããããã®ãã°ã®åå ãšãã®é²æ¢æ¹æ³ã«é¢é£ããããã€ãã®èå³æ·±ããããã¯ãããã«æ€èšã§ããŸãã
Chromiumãããžã§ã¯ãã®æåã®èšäºã§ã¯ãªãããšã«æ³šæããŠãã ããã ç§ã®ä»¥åã®æçš¿ïŒ
ã芧ã®ããã«ãèå³æ·±ãèšäºã®ã¿ã€ãã«ã§ç§ã¯èŠåŽããç§ã®åãå°œããŸããã ãããã£ãŠãããã«ç§ã®ååã¯ããã³ãæŸããŸããã
ã¡ãªã¿ã«ãç§ã¯æ°é®®ãªã¬ããŒããå匷ããŠããéãç§ã¯æµæããããšãã§ãããç§ãéåžžã«æ°ã«å
¥ã£ã1ã€ã®ééãã«ã€ããŠçãã¡ã¢ãæžããŸããã ãã®èšäºã¯ãã§ã«å
¬éãããŠãããããããã«ãªã³ã¯ãæäŸããŸãã
- 2017幎1æãã¢ã³ãã¬ã€ã»ã«ã«ããã 2æ31æ¥
ãããžã§ã¯ãããã§ãã¯ãããã³ã«ãå€æ°ã®ãšã©ãŒãå«ãŸããŠããŸããã æ°ãããã§ãã¯ãäŸå€ã§ã¯ãããŸããã§ããã ããã«ãPVS-Studioã¢ãã©ã€ã¶ãŒã¯ãšã©ãŒããŸããŸãæ€åºããã®ã§ãæåã¯ãã¹ãŠã®ãšã©ãŒãã©ãããã°ãããããããŸããã§ããã ã¬ããŒãããã°ãã確èªããŠãçŽ250ã®ãšã©ãŒãæžããèããŸããã 1ã€ã®èšäºã§250ã®ãšã©ãŒãã¹ãŠã説æããŸããïŒ ããã¯ããçš®ã®ææã«ãªãã§ãããïŒé·ããŠéå±ã§é¢çœããªãã ããã€ãã®èšäºã®èª¬æãåå²ããŸããïŒ ã©ã¡ãããšããã°ãéå±ãª1ã€ã®èšäºã®ä»£ããã«ãããã€ãã®èšäºã衚瀺ãããŸãã
次ã«ãã¿ã€ãããšã«èŠã€ãã£ããšã©ãŒãåå²ããåå¥ã«æ€èšããããšã«ããŸããã ããã«ããšã©ãŒã説æããã ãã§ãªããéçã³ãŒãåæã«å ããŠããšã©ãŒã«å¯ŸåŠããããã€ãã®æ¹æ³ãææ¡ããããšã«ããŸããã çµå±ãåŸã§éç/åçã³ãŒãåæ/ãŸãã¯äœããã®æ¹æ³ã§ãããèŠã€ããããããééããç¯ããªãæ¹ãã¯ããã«è¯ãã§ãã ãŠãŒã¶ãŒããšã©ãŒãèŠã€ããå Žåã¯ããã«æªãã ãããã£ãŠããšã©ãŒã®çºçãããå°ãªããªãããã«ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ãæ¹åã§ããå Žåã¯ããã®ãããã¯ãæ€èšãã䟡å€ããããŸãã ããã¯ãäžé£ã®èšäºã§è¡ããŸãã
ãšã©ãŒãã¿ãŒã³ãèŠãåã«ãããªããèªãã§ãã玹ä»æãå¿
èŠã§ãã ããšãã°ãã¬ããŒããæ
éã«èª¿æ»ããããšãã§ããªãã£ãçç±ã誀æ€ç¥ã®å²åã«ã€ããŠèšããªãçç±ãæ°ä»ãããã¹ãŠã®ãšã©ãŒãããã«ç¢ºèªã§ããçç±ã説æããå¿
èŠããããŸãã
ãããžã§ã¯ãæ€èšŒ
2017幎ã®çµããã«ãååã®Svyatoslav RazmyslovãChromiumãããžã§ã¯ãã®ãœãŒã¹ã³ãŒããããŠã³ããŒãããäœããã®æ¹æ³ã§ããããåŒã³åºããŠãVisual Studioã®çæãããžã§ã¯ããšPVS-Studioã¬ããŒããæäŸããŸããã æ®å¿µãªãããVisual Studioã§ãœãªã¥ãŒã·ã§ã³ãæäœããããšã¯ã§ããŸããã§ããã æ°Žææ¥ã¯5021ãããžã§ã¯ããå«ã決å®ãçã延ã³ãŸããã§ããã
ãã¹ãŠãéåžžã«é
ããäžè¬çã«ã¯ãã°ãããããšç°å¢ãèœã¡ãŸãã ãã®ãããPVS-Studio Standaloneã䜿çšããŠã¬ããŒãã調æ»ããŸããã ãã¡ãããããã¯éåžžã®Visual Studioç°å¢ã䜿çšããã»ã©äŸ¿å©ã§ã¯ãããŸãããã蚱容ç¯å²å
ã§ãã
Chromiumãããžã§ã¯ãã¯å€§ããªãããžã§ã¯ãã§ããããšãç解ããå¿
èŠããããŸãã ããããèšããªãã£ãã ããã¯å€§ããªãããžã§ã¯ãã§ãã
Chromiumãããžã§ã¯ããšããã§äœ¿çšãããã©ã€ãã©ãªã¯ã114 201 Cããã³C ++ãã¡ã€ã«ã§æ§æãããŠããŸãã ã³ãŒãã®è¡æ°ã¯30,263,757ã§ãããã®ãã¡ãã³ã¡ã³ãã¯16ïŒ
ã§ãã
PVS-Studioã¯ããã®ãµã€ãºã®ãããžã§ã¯ãããã§ã«ææã§ããããšã確èªã§ããŸãã
ç§ãèŠã€ãããã®
幎æ«å¹Žå§ãç¶ããŠããéã«ã3æ©ã«ããã£ãŠã¬ããŒãã調ã¹ãçŽ250ã®ã³ãŒããã©ã°ã¡ã³ããæžããŸããã ã¬ããŒãã泚ææ·±ã確èªããæéãšãšãã«ã®ãŒãèŠã€ãããªãã£ãããšã¯èªããŸãã ç§ã¯å€ãã®èŠåãéåžžã«è¿
éã«èª¿ã¹ãäœããã®çš®é¡ã®ãšã©ãŒã«ããããããŠãããšããããã€ãããŸã£ããç¡èŠããŸããã ããã«ã€ããŠã¯ã次ã®ç« ã§è©³ãã説æããŸãã
ããã€ãã®èšäºãæžãã®ã«ååãªå€ãã®ééããèŠã€ããããšã¯éèŠã§ãã æåŸã®è¡ãå
¬éãçµããé ã«ã¯ããããžã§ã¯ãã§èŠã€ãã£ããšã©ãŒã«é¢ããæ
å ±ã¯å°ãå€ããªã£ãŠãããããããŸããã ããããããã¯åé¡ã§ã¯ãããŸããã ç§ã®ç®æšã¯ã
éçã³ãŒãåæææ³ã®æ©èœãå®èšŒããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ãªãŒããŒãšããã€ãã®æšå¥šäºé
ãå
±æããããšã§ãã
Chromiumãšã©ã€ãã©ãªã®éçºè
ãæ°ã¥ãããšã©ãŒãä¿®æ£ã§ããããã«ãäžé£ã®èšäºã®çµãããåŸ
ããã«ãå¥ã®ãã¡ã€ã«ã«æžã蟌ã¿ãŸããã ããã¯ããããããã¹ãŠã®ãšã©ãŒã¡ãã»ãŒãžãèšäºã«å«ãŸããããã§ã¯ãªããšããçç±ã§è¡ãããã¹ãã§ãã
ææãããæ¬ é¥ã®èª¬æããããã¡ã€ã«ãžã®ãªã³ã¯ïŒ
chroma.txt ã
ãªãã¬ããŒãã泚ææ·±ãèŠãªãã£ãã®ã§ããïŒ
誀æ€ç¥ã®æ°ãæžããããã«ã¢ãã©ã€ã¶ãŒã調æŽããŸããã§ããã ãã®ããã誀ã£ãèŠåã®ããã«ã¬ããŒããèŠãããšãã§ãããå€ãã®å Žåãåãã¿ã€ãã®ã¡ãã»ãŒãžãèŠèœãšãããšãªãèŠèœãšããŠããŸããã
ããã«ããšã©ãŒããããã©ãããããã«ã¯ããããªãã³ãŒããã©ã°ã¡ã³ãã¯ã¹ãããããŸããã ã¡ãã»ãŒãžã¯ãããããããŸãããç§ã¯äžäººã§ãã ã³ãŒãã泚ææ·±ãèŠãå§ããããæ°ãæåŸã«èšäºãæžãããšã«ãªããŸãã
ç¹ã«äžæ
£ããªã³ãŒãã®å Žåãããã€ãã®èŠåãç解ããã®ãé£ããçç±ãäŸãæããŠèª¬æããŸãã ãŸããChromiumã§ã¯ãå
šäœã®ã³ãŒããããããŸããã
ãã®ãããPVS-Studioã¢ãã©ã€ã¶ãŒã¯V8ãããžã§ã¯ããã¡ã€ã«ã®1ã€ã«èŠåãçºè¡ããŸããã
V547 CWE-570ãåãæšãŠããããåŒã¯åžžã«åœã§ãã objects.cc 2867
ãšã©ãŒãèŠã€ãããŸãããããããšã誀æ€ç¥ã§ããïŒ èªåã§åé¡ãäœã§ããããææ¡ããŠã¿ãŠãã ããã ã¢ãã©ã€ã¶ãŒãæãå Žæã«ã³ã¡ã³ãã// <=ããè¿œå ããŸããã
void String::StringShortPrint(StringStream* accumulator, bool show_details) { int len = length(); if (len > kMaxShortPrintLength) { accumulator->Add("<Very long string[%u]>", len); return; } if (!LooksValid()) { accumulator->Add("<Invalid String>"); return; } StringCharacterStream stream(this); bool truncated = false; if (len > kMaxShortPrintLength) { len = kMaxShortPrintLength; truncated = true; } bool one_byte = true; for (int i = 0; i < len; i++) { uint16_t c = stream.GetNext(); if (c < 32 || c >= 127) { one_byte = false; } } stream.Reset(this); if (one_byte) { if (show_details) accumulator->Add("<String[%u]: ", length()); for (int i = 0; i < len; i++) { accumulator->Put(static_cast<char>(stream.GetNext())); } if (show_details) accumulator->Put('>'); } else {
ããã£ãïŒ é£ããã§ããïŒ
é£ãã ãããŠãããããŸãã«ã¢ãã©ã€ã¶ãŒã®ãã¹ãŠã®èŠåãç 究ã§ããªãçç±ã§ãã
ç解ããã®ãé¢åãªäººã®ããã«ãç§ã¯ãã€ã³ããäœã§ãããã説æããŸãã
ãã®ãããã¢ãã©ã€ã¶ãŒã¯
ifïŒtruncatedïŒãåžžã«falseã§ãããšäž»åŒµããŸãã äžçªäžã®è¡ãæ®ããŠãé¢æ°ãçãããŸãããïŒ
void F() { int len = length(); if (len > kMaxShortPrintLength) return; bool truncated = false; if (len > kMaxShortPrintLength) truncated = true; if (truncated) {
ããã¹ããé·ãããå Žåãã€ãŸãifæ¡ä»¶ãæºããããŠããå Žå
ïŒlen> kMaxShortPrintLengthïŒ ã
åãæšãŠããããã©ã°ã¯
trueã§ãªããã°ãªããŸããã ãã ããããã¹ããé·ãããå Žåãäžèšã®é¢æ°ã¯çµäºããŸãã
åãæšãŠãåžžã«
falseã§ãããæåŸã«3ã€ã®ãã€ã³ããè¿œå ãããªãã®ã¯ãã®ããã§ãã
ãããŠä»ã§ããã¢ãã©ã€ã¶ãŒãèŠåãåºãçç±ãèŠã€ããã®ã§ãã³ãŒãã®æžãæ¹ãããããŸããã ãŸãã¯ãå®éã«ã¯ãããã«é¢æ°ãçµäºããå¿
èŠããããŸãããã®å Žåããã€ã³ããè¿œå ããã³ãŒãã¯äžèŠã§ãã ãŸãã¯ãã€ã³ããå¿
èŠã§ããæåã®ãã§ãã¯ãåé€ããå¿
èŠããããŸããããã«ãããã¹ã±ãžã¥ãŒã«ããæ©ãæ©èœãçµäºããŸãã ãµãŒãããŒãã£ã®ã³ãŒãã®ãšã©ãŒã調ã¹ãããšã¯éåžžã«å°é£ã§ãã
PVS-Studioã¢ãã©ã€ã¶ãŒã¯ãV547ã«ãã£ãŠå€ãã®èŠåãçæããŸããã ç§ã¯åœŒãã®10çªç®ã®éšåã®ã©ãããèŠãŸããã ãããã£ãŠãããªããæ
éã«å匷ããããšãçŽæããå Žåãç§ãæžãããããã¯ããã«å€ãã®ãšã©ãŒãèŠã€ãããŸãã
ãããã®èŠåã«ããããããçç±ã®ãã1ã€ã®äŸã次ã«ç€ºããŸãã
void ResourcePrefetcher::OnReadCompleted(net::URLRequest* request, int bytes_read) { DCHECK_NE(net::ERR_IO_PENDING, bytes_read); if (bytes_read <= 0) { FinishRequest(request); return; } if (bytes_read > 0) ReadFullResponse(request); }
PVS-StudioèŠåïŒV547 CWE-571åŒ 'bytes_read> 0'ã¯åžžã«trueã§ãã resource_prefetcher.cc 308
åã®ã±ãŒã¹ãšã¯ç°ãªãããã¹ãŠãã·ã³ãã«ã§ãã ã¢ãã©ã€ã¶ãŒã¯ã2çªç®ã®æ¡ä»¶ãåžžã«çã§ããããšãæ£ç¢ºã«è¿°ã¹ãŠããŸãã
ãã ããããã¯ãšã©ãŒã§ã¯ãªããåé·ãªã³ãŒãã§ãã ãã®ãããªã³ãŒããç·šéããå¿
èŠããããŸããïŒ ããã¯é£ãã質åã§ãã ã¡ãªã¿ã«ããããã¢ãã©ã€ã¶ãŒã®ç£èŠäžã§ããã«ã³ãŒããæžãæ¹ãã¯ããã«è¯ãçç±ã§ãããäžåºŠéãã®èµ·åã§èŠåãåæ¢ã«æ©ãåãã®ã§ã¯ãããŸããã
ã¢ãã©ã€ã¶ãŒãå®æçã«äœ¿çšãããå Žåããã®ãããªåé·ãªã³ãŒãã¯ããŒãžã§ã³ç®¡çã·ã¹ãã ã«å
¥ã蟌ãŸãªãå¯èœæ§ãé«ãã§ãããã ããã°ã©ãã¯èŠåãèŠãŠããããšã¬ã¬ã³ãã«æžãã§ãããã ããšãã°ã次ã®ããã«ïŒ
void ResourcePrefetcher::OnReadCompleted(net::URLRequest* request, int bytes_read) { DCHECK_NE(net::ERR_IO_PENDING, bytes_read); if (bytes_read <= 0) FinishRequest(request); else ReadFullResponse(request); }
ã¢ãã©ã€ã¶ãŒã¯ããã§ã¯æ²é»ããŠããŸãã åæã«ãã³ãŒãã¯çããªããã·ã³ãã«ã«ãªããç解ãããããªããŸããã
V547ã«å ããŠãã¢ãã©ã€ã¶ãŒã¯
倧éã®V560ã¡ãã»ãŒãžã
çæããŸããã ãã®èŠåã¯ããã¹ãŠã®æ¡ä»¶ã§ã¯ãªãããã®äžéšãåžžã«çãŸãã¯åœã§ããããšã瀺ããŠããŸãã
ç§ããããã®ã¡ãã»ãŒãžãå匷ããã®ã«é£œããŠããŸããã ããã¯ãV560ã®èŠåãæªãããšãæå³ãããã®ã§ã¯ãããŸããã ããããçã«é倧ãªééãã¯ãŸãã§ãã åºæ¬çã«ããããã®èŠåã¯äœå質ã®åé·ã³ãŒãã瀺ããŠããŸãã
éå±ãªåé·ãã§ãã¯ã®äŸïŒ
template <typename ConditionT, typename ActionT> std::unique_ptr<DeclarativeRule<ConditionT, ActionT>> DeclarativeRule<ConditionT, ActionT>::Create(....) { .... bool bad_message = false;
PVS-StudioèŠåïŒV560 CWE-570æ¡ä»¶åŒã®äžéšã¯åžžã«falseã§ãïŒbad_messageã declarative_rule.h 472
æ¡ä»¶ïŒ
if (!error->empty() || bad_message)
次ã®ããã«ç°¡ç¥åã§ããŸãã
if (!error->empty())
次ã®ãããªã³ãŒããæžãæãããªãã·ã§ã³ããããŸãã
if (bad_message) { *error = "An action of a rule set had an invalid " "structure that should have been caught " "by the JSON validator."; } if (!error->empty() || bad_message) return std::move(error_result);
ãªããã®ã¬ããŒãã泚ææ·±ãç 究ããªãã£ãã®ãã説æã§ãããšããã®ã§ããã ããã¯å€ãã®æéã®ãããäœæ¥ã§ãã
åœéœæ§ç
誀æ€ç¥ã®å²åãèšãããšã¯ã§ããŸããã ãŸãããã°ãæåŸãŸã§èŠãããšãã§ãããPVS-Studioã§æ€åºããããšã©ãŒã®æ£ç¢ºãªæ°ãããããŸããã 第äºã«ãæåã«ã¢ãã©ã€ã¶ãŒãã»ããã¢ããããã«èª€æ€ç¥ã®å²åã«ã€ããŠè©±ãããšã¯æå³ããããŸããã
PVS-Studioã¢ãã©ã€ã¶ãŒãæ§æãããšã誀æ€ç¥ã®10ã15ïŒ
ãäºæ³ãããŸãã ãã®ãããªæ§æã®äŸã¯ãèšäºã
EFLã³ã¢ã©ã€ãã©ãªã®äŸã䜿çšããPVS-Studioã¢ãã©ã€ã¶ãŒä»æ§ã誀æ€ç¥ã®10ã15ïŒ
ãã§èª¬æãããŠããŸãã
ãã¡ãããChromiumã«å¯ŸããŠãã®ãããªèšå®ãè¡ãããšãã§ããŸãããèšäºã§ããã€ãã®æ°å€ã瀺ãããã ãã«ãããè¡ãã®ã¯éåççã§ãã ããã¯ç§ãã¡ãæºåãã§ããŠããå€ãã®ä»äºã§ãããææã§ãã Googleã¯ãã¢ãã©ã€ã¶ãŒãæ§æãããšåæã«ãèŠã€ãã£ããã¹ãŠã®ãšã©ãŒãä¿®æ£ããããã«ããŒã ãåŒãä»ããå¯èœæ§ããããŸãã ã¯ããããã
ãã³ããšèããŠãã ããã
ã«ã¹ã¿ãã€ãºã¯ééããªãå¯èœã§ãããè¯ãçµæãåŸãããŸãã ããšãã°ããã¹ãŠã®èª€æ€ç¥ã®çŽååã¯ãã³ãŒãã§ã®DCHECKãã¯ãã®äœ¿çšã«é¢é£ä»ããããŠããŸãã
ãã®ãã¯ãã¯æ¬¡ã®ããã«ãªããŸãã
#define LAZY_STREAM(stream, condition) \ !(condition) ? (void) 0 : ::logging::LogMessageVoidify() & (stream) #define DCHECK(condition) \ LAZY_STREAM(LOG_STREAM(DCHECK), !ANALYZER_ASSUME_TRUE(condition))\ << "Check failed: " #condition ". "
ã¢ãã©ã€ã¶ãŒã®èŠ³ç¹ããèŠããšãPVS-Studioã¯ãããçš®ã®æ¡ä»¶ãšäžé£ã®ã¢ã¯ã·ã§ã³ããã§ãã¯ããã ãã§ããããã®åŸãæ®ãã®ã³ãŒãã¯åŒãç¶ãå®è¡ãããŸãã
ãã®çµæãã¢ãã©ã€ã¶ãŒã¯ãããšãã°æ¬¡ã®ãããªã³ãŒãã«å¯ŸããŠèª€ã£ãèŠåãçæããŸãã
bool Value::Equals(const Value* other) const { DCHECK(other); return *this == *other; }
PVS-Studioã®ã¬ããŒãïŒ
V1004 CWE-476 nullptrã«å¯ŸããŠæ€èšŒãããåŸãããã®ä»ãã®ãã€ã³ã¿ãŒãå®å
šã«äœ¿çšãããŸããã§ããã è¡ã確èªïŒ621ã622ãvalues.cc 622
ã¢ãã©ã€ã¶ãŒã®èŠ³ç¹ããã
ä»ã®ãã€ã³ã¿ãŒã¯
nullptrã®åçæ§ã«ã€ããŠãã§ãã¯ãããŸãã ãã ãã
otherã NULLãã€ã³ã¿ãŒã§ãããã©ããã«é¢ä¿ãªããéåç
§ãçºçããŸãã ã¢ãã©ã€ã¶ãŒã¯ããã®ãããªã¢ã¯ã·ã§ã³ã¯çããããšèŠãªããŸãã
DCHECKãã¯ãã¯ã
ã¢ãµãŒããã¯ãã®äžçš®ã§ãã ããããã¢ãã©ã€ã¶ãŒã
assertãç¥ã£ãŠããå Žåã
DCHECKãšã¯äœã-ç解ããŠããŸããã äœãèµ·ãã£ãŠããããããè¯ã説æããããã«ãæ¬äŒŒã³ãŒããæžããŸãã
bool Equals(T* ptr) const { if (!ptr) LogMessage(); return *this == *ptr; }
ããã¯ãPVS-Studioã¢ãã©ã€ã¶ãŒãã³ãŒããèªèããæ¹æ³ã§ãã æåã«ã
nullptrã®åçæ§ã«ã€ããŠãã€ã³ã¿ãŒããã§ãã¯ãããŸãã ãã€ã³ã¿ãŒããã«ã®å Žåã
LogMessageé¢æ°ã
åŒã³åºãããŸãã ãã ããé¢æ°ã¯å¶åŸ¡ãè¿ããªããšããŒã¯ãããŠããŸããã ã€ãŸãã
ptrã NULLãã€ã³ã¿ãŒã§ãããã©ããã«é¢ä¿ãªããé¢æ°ã¯å®è¡ãç¶ç¶ããŸãã
次ã«ããã€ã³ã¿ãŒãéåç
§ãããŸãã ãããããŒãã«çãããã©ããããã§ãã¯ãããã§ãã¯ããããŸããïŒ ãããã£ãŠããã€ã³ã¿ãŒããã«ã§ããå¯èœæ§ããããã¢ãã©ã€ã¶ãŒã¯ã³ãŒãå
ã®åé¡ãéç¥ããŸãã ããã«ãããã¢ãã©ã€ã¶ãŒã¯å®å
šã«æ£ããã圹ã«ç«ããªãã¡ãã»ãŒãžã倧éã«çæããŸãã
ãšããã§ããã®ãããªãã¯ãã®å®è£
ã¯PVS-Studioã ãã§ãªãæ··ä¹±ãæããŸãã ãã®ãããVisual Studioã«çµã¿èŸŒãŸããã¢ãã©ã€ã¶ãŒçšã«ç¹å¥ãªãããã¯ã¢ããããäœæãããŸããã
#if defined(_PREFAST_) && defined(OS_WIN)
PVS-Studioã¢ãã©ã€ã¶ãŒã«å¯ŸããŠåæ§ã®ããã¯ã¢ãããäœæãããšã誀æ€ç¥ã®ç¶æ³ãåçã«å€ãããŸãã ç§ã®æšå®ã«ãããšã誀æ€ç¥ã®ååã¯ããã«æ¶ããŸãã ã¯ããã¡ããã©ååã åé¡ã¯ã
DCHECKãã¯ã
ãèšå€§ãªåæ°äœ¿çšãããããšã§ãã
ãã®ä»ã®åºçç©
ããã§çŽ¹ä»èšäºãçµäºããŸããããã§ã¯ãä»ã®èšäºãžã®ãªã³ã¯ãåŸã
ã«é
眮ããŸãã ãæž
èŽããããšãããããŸããã
- çŸããChromiumãšäžåšçšãªmemset ã
- ãã¬ãŒã¯ããã³ãã©ãŒã«ã¹ã«ãŒã¹ããŒãã¡ã³ã ã
- ChromiumïŒã¡ã¢ãªãªãŒã¯ ã
- ã¯ãã ïŒã¿ã€ããã¹ ã
- ChromiumïŒäžæ£ç¢ºãªããŒã¿ã®äœ¿çš ã
- mallocé¢æ°ãäœãè¿ãããã確èªããããšãéèŠãªã®ã¯ãªãã§ãã ã
- ChromiumïŒãã®ä»ã®ãšã©ãŒ ã
ãã®èšäºãè±èªåã®èŽè¡ãšå
±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒAndrey Karpovã
ChromiumïŒãããžã§ã¯ãã®6çªç®ã®ãã§ãã¯ã«ã€ã㊠ã