ã¯ãã
Chromiumã¯ãGoogleãéçºãããªãŒãã³ãœãŒã¹ã®ãŠã§ããã©ãŠã¶ã§ãã Chromiumã«åºã¥ããŠãGoogle Chromeãã©ãŠã¶ãŒãäœæãããŸãã Get the CodeããŒãžã§ããã®ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒããããŠã³ããŒãããæ¹æ³ãåŠã¶ããšãã§ããŸãã
äžè¬çãªæ å ±
以åã¯Chromiumãããžã§ã¯ãã確èªããŠããŸããããããã«ã€ããŠã¯2ã€ã®èšäºããããŸãã æåã® ãã§ã㯠ïŒ05/23/2011ïŒã 2çªç®ã®ãã§ã㯠ïŒ13/10/2011ïŒã§ãã ãããŠãåžžã«ãšã©ãŒãèŠã€ããŸããã ããã¯ãã³ãŒãã¢ãã©ã€ã¶ãŒã®å©ç¹ã«é¢ãã埮åŠãªãã³ãã§ãã
çŸåšïŒãããžã§ã¯ãã®ãœãŒã¹ã³ãŒãã¯2013幎7æã«ããŠã³ããŒããããŠããŸãïŒChromiumã¯1169ãããžã§ã¯ãã§æ§æãããŠããŸã ã C / C ++ã®ãœãŒã¹ã³ãŒãã®ç·éã¯260ã¡ã¬ãã€ãã§ãã ããã«å ããŠã䜿çšæžã¿ã®å€éšã©ã€ãã©ãªãããã«450ã¡ã¬ãã€ãè¿œå ã§ããŸãã
2011幎ã«Chromiumãããžã§ã¯ãã®æåã®ãã¹ããè¡ã£ãå Žåãå€éšã©ã€ãã©ãªå šäœã®ããªã¥ãŒã ã¯å€ãããªãã£ãããšãããããŸãã ãããããããžã§ã¯ãèªäœã®ã³ãŒãã¯155ã¡ã¬ãã€ããã260ã¡ã¬ãã€ãã«å€§ããæé·ããŸããã
楜ãã¿ã®ããã«ã埪ç°çè€é床ãèšç®ããŸããã
PVS-Studioã¢ãã©ã€ã¶ãŒã«ã¯ã ãµã€ã¯ãããã£ãã¯ã®è€éããéåžžã«å€§ããé¢æ°ãæ€çŽ¢ããæ©èœããããŸã ã éåžžããã®ãããªé¢æ°ã¯ãªãã¡ã¯ã¿ãªã³ã°ã®åè£ã§ãã 1,160件ã®ãããžã§ã¯ãããã§ãã¯ããåŸãç§ã¯åœç¶ãããããŒãã®ãæãè€éãªæ©èœãã®ãã£ã³ããªã³ãšãªããããžã§ã¯ãã«èå³ãæã¡ãŸããã
2782ã«çããæé«ã®åŸªç°çè€é床ã¯ãChromiumãããžã§ã¯ãã®ValidateChunkAMD64ïŒïŒé¢æ°ã«å±ããŸãã ãããã圌女ã¯ç«¶æäŒããå€±æ Œã«ãªããªããã°ãªããŸããã§ããã ãã®é¢æ°ã¯ãèªåçæãããvalidator_x86_64.cãã¡ã€ã«ã«ãããŸãã æ®å¿µã ã ãããŠãããã¯å£®å€§ãªèšé²ä¿æè ã«ãªãã§ãããã ãã®ãããªåŸªç°çãªè€éãã«åºäŒã£ãããšã¯ãããŸããã
ãããã£ãŠãæåã®3ã€ã®å Žæã¯æ¬¡ã®æ©èœãåãåããŸãã
- WebKitã©ã€ãã©ãªã htmltokenizer.cppãã¡ã€ã«ã®HTMLTokenizer :: nextTokenïŒïŒé¢æ°ã 埪ç°å°é£1106 ã
- ã¡ãµå³æžé€šã glsl_lexer.ccãã¡ã€ã«ã®_mesa_glsl_lexïŒïŒé¢æ°ã ãµã€ã¯ãããã£ãã¯é£æ床1088 ã
- Usrsctplibã©ã€ãã©ãªïŒæªç¥ã®ã¢ã¹ãªãŒãïŒã htmltokenizer.cppãã¡ã€ã«ã®sctp_setoptïŒïŒé¢æ°ã ãµã€ã¯ãããã£ãã¯é£æ床1026 ã
埪ç°çè€é床ã1000ã§ããããšã誰ãã«ããããªãå Žåã¯ãç¥ããªãã§ãã ããã 粟ç¥çå¥åº·ã¯è¯ããªããŸã:)ã äžè¬çã«ãããã®å€ãã
ã³ãŒãå質
Chromiumãããžã§ã¯ãã³ãŒãã®å質ã«ã€ããŠã¯äœãèšããŸããïŒ å質ã¯ãŸã åªããŠããŸãã ã¯ãã倧èŠæš¡ãªãããžã§ã¯ããšåæ§ã«ãåžžã«ãšã©ãŒãèŠã€ããããšãã§ããŸãã ãããããã®æ°ãã³ãŒãã®éã§å²ããšããã®å¯åºŠã¯ç¡èŠã§ããŸãã ããã¯ããšã©ãŒã®å°ãªãéåžžã«åªããã³ãŒãã§ãã ããããªã³ãŒãã«ã¡ãã«ãäžããŸãã åã®ã¡ãã«ã¯ãMicrosoftã®Casablancaãããžã§ã¯ãïŒC ++ REST SDKïŒã«éãããŸããã

å³1. Chromiumã®äœæè ãžã®ã¡ãã«ã
äŒç€Ÿã§ã¯ãChromiumãšãšãã«ãããã«å«ãŸãããµãŒãããŒãã£ã©ã€ãã©ãªããã§ãã¯ãããŸããã ãããããããã§èŠã€ãã£ããšã©ãŒã説æããããšã¯èå³æ·±ãããšã§ã¯ãããŸããã ããã«ãã¬ããŒããéåžžã«è¡šé¢çã«èŠãŸããã ããããç§ã¯æªã人ã§ã¯ãããŸããã 1169ãããžã§ã¯ãã®æ€èšŒã«é¢ããã¬ããŒããå®å šã«ç 究ããããšããå Žåãç§ã¯ããªããèŠãŸãã ã¯ã€ãã¯ã«ãã¯ã§æ°ã¥ããããšãããšã©ãŒã®ããŒã¿ããŒã¹äŸã«å ¥ããŸããã ãã®èšäºã§ã¯ãChromiumèªäœã®ã³ãŒãïŒãã©ã°ã€ã³ãªã©ïŒã§æ°ã¥ãããšã©ãŒã®ã¿ã«è§ŠããããšæããŸãã
Chromiumãããžã§ã¯ãã¯éåžžã«åªããŠãããããèŠã€ãã£ããšã©ãŒã®äŸãæããã®ã¯ãªãã§ããïŒ ãã¹ãŠãéåžžã«ç°¡åã§ãã PVS-Studioã¢ãã©ã€ã¶ãŒã®èœåãå®èšŒããããšæããŸãã 圌ãChromiumã§ãšã©ãŒãèŠã€ããããšãã§ããå Žåããã®ããŒã«ã¯æ³šç®ã«å€ããŸãã
ã¢ãã©ã€ã¶ãŒã¯ãåèšã§710ã¡ã¬ãã€ãã®äœäžãã®ãã¡ã€ã«ãåã¿ç ãããšãã§ããŸããããããã«ãšããããŸããã§ããã ãããžã§ã¯ãã¯é«åºŠãªè³æ Œãæã€éçºè ã«ãã£ãŠéçºãããããŸããŸãªããŒã«ã«ãã£ãŠãã§ãã¯ãããŠãããšããäºå®ã«ãããããããPVS-Studioã¯äŸç¶ãšããŠæ¬ é¥ãç¹å®ããããšãã§ããŸããã ããã¯çŽ æŽãããææã§ãïŒ ãããŠæåŸã«-䞊åæ€èšŒïŒAMD FX-8320 / 3.50 GHz / 8ã³ã¢ããã»ããµã16.0 GB RAMïŒã«ããã劥åœãªæéïŒçŽ5æéïŒã§ãããè¡ããŸããã
èŠã€ãã£ããã°ã®äžéš
ã¬ããŒãã衚瀺ãããšãã«ç§ã®ç®ãèœã¡çããã³ãŒãäŸãæ€èšããããšãææ¡ããŸãã 詳现ãªèª¿æ»ã«ããããã£ãšèå³æ·±ããã®ãèŠã€ããããšãã§ãããšç¢ºä¿¡ããŠããŸãã
èŠãããN1-ã¿ã€ããã¹
Vector3dF Matrix3F::SolveEigenproblem(Matrix3F* eigenvectors) const { // The matrix must be symmetric. const float epsilon = std::numeric_limits<float>::epsilon(); if (std::abs(data_[M01] - data_[M10]) > epsilon || std::abs(data_[M02] - data_[M02]) > epsilon || std::abs(data_[M12] - data_[M21]) > epsilon) { NOTREACHED(); return Vector3dF(); } .... }
V501 '-'æŒç®åã®å·Šå³ã«åãå¯æ¬¡åŒããããŸãïŒdata_ [M02]-data_ [M02] matrix3_f.cc 128
3x3è¡åã察称ã§ããããšã確èªããå¿ èŠããããŸãã

å³2. 3x3ãããªãã¯ã¹ã
ãããè¡ãã«ã¯ã次ã®èŠçŽ ãæ¯èŒããŸãã
- M01ããã³M10
- M02ããã³M20
- M12ããã³M21
ã»ãšãã©ã®å Žåãã³ãŒãã¯Copy-Pasteãã¯ãããžãŒã䜿çšããŠèšè¿°ãããŠããŸã ã ãã®çµæãã»ã«M02ã¯ããèªäœãšæ¯èŒãããŸãã ããããã®ãããªæ¥œããè¡åã¯ã©ã¹ã§ãã
å¥ã®ç°¡åãªã¿ã€ããã¹ïŒ
bool IsTextField(const FormFieldData& field) { return field.form_control_type == "text" || field.form_control_type == "search" || field.form_control_type == "tel" || field.form_control_type == "url" || field.form_control_type == "email" || field.form_control_type == "text"; }
V501ã||ãã®å·ŠåŽãšå³åŽã«åããµãåŒãfield.form_control_type == "text"ãããããŸã æŒç®åã autocomplete_history_manager.cc 35
2åãæåå "text"ãšã®æ¯èŒããããŸãã ããã¯çãããã§ãã ãã¶ãã1è¡ã ãã§ã¯äžèŠã§ãã ãŸãã¯ãä»ã®æ¯èŒã¯å¿ èŠãããŸããã
èŠãããN2-å察ã®æ¡ä»¶
static void ParseRequestCookieLine( const std::string& header_value, ParsedRequestCookies* parsed_cookies) { std::string::const_iterator i = header_value.begin(); .... if (*i == '"') { while (i != header_value.end() && *i != '"') ++i; .... }
V637å察ã®2ã€ã®æ¡ä»¶ãçºçããŸããã 2çªç®ã®æ¡ä»¶ã¯åžžã«falseã§ãã è¡ã確èªããŠãã ããïŒ500ã501ãweb_request_api_helpers.cc 500
ãã®ã³ãŒãã¯ãäºéåŒçšç¬Šã§å²ãŸããããã¹ããæž¡ãå¿ èŠãããããã«æããŸãã ãããå®éã«ã¯ããã®ã³ãŒãã¯äœãããŸããã æ¡ä»¶ã¯ããã«åœã§ãã ããããããããããã«ããšã©ãŒã®æ¬è³ªã匷調ããæ¬äŒŒã³ãŒããäœæããŸãã
if ( A == 'X' ) { while ( .... && A != 'X' ) ....;
ã»ãšãã©ã®å Žåã圌ãã¯ããã§ãã€ã³ã¿ã1æåã«ç§»åããã®ãå¿ããŠãããã³ãŒãã¯æ¬¡ã®ããã«ãªã£ãŠããã¯ãã§ãã
if (*i == '"') { ++i; while (i != header_value.end() && *i != '"') ++i;
èŠãããN3-åé€èŠçŽ ã®å€±æ
void ShortcutsProvider::DeleteMatchesWithURLs( const std::set<GURL>& urls) { std::remove_if(matches_.begin(), matches_.end(), RemoveMatchPredicate(urls)); listener_->OnProviderUpdate(true); }
V530é¢æ° 'remove_if'ã®æ»ãå€ã䜿çšããå¿ èŠããããŸãã shortcuts_provider.cc 136
ã³ã³ããããèŠçŽ ãåé€ããã«ã¯ãstd :: remove_ifïŒïŒé¢æ°ã䜿çšããŸãã ããããããã¯èª€ã£ãŠäœ¿çšãããŸãã å®éãremove_ifïŒïŒã¯äœãåé€ããŸããã èŠçŽ ãå é ã«ç§»åããå埩åããŽãç®±ã«æ»ããŸãã ã³ã³ããã§eraseïŒïŒé¢æ°ãåŒã³åºããŠããã¿ãèªåã§åé€ããå¿ èŠããããŸãã ãŠã£ãããã£ã¢ã®èšäºã ã€ã¬ãŒãºåé€ã€ãã£ãªã ããåç §ããŠãã ããã
æ£ããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
matches_.erase(std::remove_if(.....), matches_.end());
Seen N4-SOCKETãšã®æ°žé ã®æ··ä¹±
Linuxã®äžçã§ã¯ãSOCKETã¯æŽæ°ã®SIGNATURE DATAã¿ã€ãã§ãã
Windowsã®äžçã®SOCKETã¯ãæŽæ°ã®UNSIGNABLEããŒã¿åã§ãã
Visual C ++ããããŒãã¡ã€ã«ã§ã¯ãSOCKETåã¯æ¬¡ã®ããã«å®£èšãããŸãã
typedef UINT_PTR SOCKET;
ãããã圌ãã¯åžžã«ãããå¿ããŠã次ã®åœ¢åŒã®ã³ãŒããæžããŸãã
class NET_EXPORT_PRIVATE TCPServerSocketWin { .... SOCKET socket_; .... }; int TCPServerSocketWin::Listen(....) { .... socket_ = socket(address.GetSockAddrFamily(), SOCK_STREAM, IPPROTO_TCP); if (socket_ < 0) { PLOG(ERROR) << "socket() returned an error"; return MapSystemError(WSAGetLastError()); } .... }
V547åŒ 'socket_ <0'ã¯åžžã«falseã§ãã 笊å·ãªãã®åã®å€ã0æªæºã«ãªãããšã¯ãããŸããtcp_server_socket_win.cc 48
笊å·ãªãå€æ°ã¯åžžã«ãŒã以äžã§ãã ããã¯ããsocket_ <0ãã®ãã§ãã¯ãæå³ããªããªãããšãæå³ããŸãã ããã°ã©ã ã®åäœäžã«ãœã±ãããéãããšãã§ããªãå Žåããã®ç¶æ³ã¯æ£ããåŠçãããŸããã
N5ãåç §-æäœãšã®æ··ä¹±ãããã³ïŒ
enum FontStyle { NORMAL = 0, BOLD = 1, ITALIC = 2, UNDERLINE = 4, }; void LabelButton::SetIsDefault(bool is_default) { .... style = is_default ? style | gfx::Font::BOLD : style & !gfx::Font::BOLD; .... }
V564ãïŒãæŒç®åã¯ããŒã«åã®å€ã«é©çšãããŸãã æ¬åŒ§ãå«ããã®ãå¿ããŠããããã&&ãæŒç®åã䜿çšããããšãæå³ããŠããå¯èœæ§ããããŸãã label_button.cc 131
ã³ãŒãã¯æ¬¡ã®ããã«æ©èœããã¯ãã ã£ãããã§ãã
- å€æ°ãis_defaultããtrueã®å ŽåãBOLDã¹ã¿ã€ã«ãæ åœããããããåžžã«èšå®ããå¿ èŠããããŸãã
- å€æ° 'is_default'ãfalseã®å ŽåãBOLDã¹ã¿ã€ã«ã®åå ã§ããããããåžžã«ã¯ãªã¢ããå¿ èŠããããŸãã
ãã ãããstyleïŒïŒGfx :: Font :: BOLDããšããè¡šçŸã¯ãããã°ã©ããæåŸ ãããšããã«ã¯æ©èœããŸããã æäœã®çµæïŒGfx :: Font :: BOLDã¯falseã«ãªããŸãã ãŸãã¯ãèšãæãããš0ã§ããäžèšã®ã³ãŒãã¯ãããšåçã§ãã
style = is_default ? style | gfx::Font::BOLD : 0;
ã³ãŒããæ£ããæ©èœããããã«ã¯ãæäœãããã䜿çšããå¿ èŠããããŸãã
style = is_default ? style | gfx::Font::BOLD : style & ~gfx::Font::BOLD;
èŠãããN6-äžæãªããžã§ã¯ãã®çãããäœæ
base::win::ScopedComPtr<IDirect3DSurface9> scaler_scratch_surfaces_[2]; bool AcceleratedSurfaceTransformer::ResizeBilinear( IDirect3DSurface9* src_surface, ....) { .... IDirect3DSurface9* read_buffer = (i == 0) ? src_surface : scaler_scratch_surfaces_[read_buffer_index]; .... }
V623ãïŒïŒãæŒç®åã®æ€æ»ãæ€èšããŠãã ããã ãScopedComPtrãã¿ã€ãã®äžæãªããžã§ã¯ããäœæããããã®åŸç Žæ£ãããŸãã 第2ãªãã©ã³ãã確èªããŠãã ããã accelerator_surface_transformer_win.cc 391
ãã®ã³ãŒãã§ãšã©ãŒãçºçããããšã¯ã»ãšãã©ãããŸãããã説æãã䟡å€ããããŸãã äžéšã®ããã°ã©ãã¯ãC ++èšèªã®æ°ããèå³æ·±ããã©ããã«ã€ããŠåŠç¿ããããã§ãã
äžèŠããã¹ãŠãã·ã³ãã«ã§ãã æ¡ä»¶ã«å¿ããŠããã€ã³ã¿ãŒãsrc_surfaceããŸãã¯é åãscaler_scratch_surfaces_ãã®èŠçŽ ã®ãããããéžæããŸãã é åã¯ãbase :: win :: ScopedComPtr <IDirect3DSurface9>åã®ãªããžã§ã¯ãã§æ§æãããIDirect3DSurface9ãžã®ãã€ã³ã¿ãŒã«èªåçã«ãã£ã¹ãã§ããŸãã
æªéã¯è©³çŽ°ã«ãããŸãã
äžé æŒç®å 'ïŒïŒ'æ¡ä»¶ã«å¿ããŠç°ãªãåãè¿ãããšã¯ã§ããŸããã ç°¡åãªäŸã§èª¬æããŸãã
int A = 1; auto X = v ? A : 2.0;
The ?:æŒç®åã¯ãdoubleãã®ã¿ã€ããè¿ããŸãã ãã®çµæãå€æ° 'X'ãdoubleåã«ãªããŸãã ããããããã¯åé¡ã§ã¯ãããŸããã å€æ°ãAããæé»çã«å±éããŠãdoubleããå ¥åããããšãéèŠã§ãïŒ
次ã®ãããªèšè¿°ãè¡ããšãåé¡ãçºçããŸãã
CString s1(L"1"); wchar_t s2[] = L"2"; bool a = false; const wchar_t *s = a ? s1 : s2;
ãã®ã³ãŒãã®å®è¡ã®çµæãå€æ° 's'ã¯ãCStringåã®äžæãªããžã§ã¯ãå ã®ããŒã¿ã瀺ããŸãã åé¡ã¯ããã®ãªããžã§ã¯ããããã«ç Žæ£ãããããšã§ãã
Chromiumã®ãœãŒã¹ã³ãŒãã«æ»ããŸãã
IDirect3DSurface9* read_buffer = (i == 0) ? src_surface : scaler_scratch_surfaces_[read_buffer_index];
ããã§ãæ¡ä»¶ 'i == 0'ãæºãããããšã次ã®ããšãèµ·ãããŸãã
- baseåã®äžæãªããžã§ã¯ã:: win :: ScopedComPtr <IDirect3DSurface9>ã¯ããã€ã³ã¿ãŒ 'src_surface'ããæ§ç¯ãããŸãã
- äžæãªããžã§ã¯ãã¯æé»çã«IDirect3DSurface9ãã€ã³ã¿ãŒã«ãã£ã¹ããããread_bufferå€æ°ã«é 眮ãããŸãã
- äžæãªããžã§ã¯ãã¯ç Žæ£ãããŸãã
ç§ã¯ããã°ã©ã ã®ããžãã¯ãšScopedComPtrã¯ã©ã¹ãç¥ããªãã®ã§ãåŠå®çãªçµæãçãããã©ãããèšãã®ã¯é£ãããšæããŸãã ã»ãšãã©ã®å Žåãã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ãªã³ã¯æ°ã®ã«ãŠã³ã¿ãŒãå¢å ãããã¹ãã©ã¯ã¿ã§ã¯æžå°ããŸãã ãããŠããã¹ãŠãããŸããããŸãã
ããã§ãªãå Žåã誀ã£ãŠç¡å¹ãªãã€ã³ã¿ãååŸããããåç §ã«ãŠã³ããå£ãããããå¯èœæ§ããããŸãã
äžèšã§èšãã°ãããšãééãããªããŠããèªè ãäœãæ°ããããšãåŠã¹ããå¬ããã§ãã äžé æŒç®åã¯ãæã£ããããã¯ããã«å±éºã§ãã
ããã«ãã®ãããªçãããå ŽæããããŸãïŒ
typedef GenericScopedHandle<HandleTraits, VerifierTraits> ScopedHandle; DWORD HandlePolicy::DuplicateHandleProxyAction(....) { .... base::win::ScopedHandle remote_target_process; .... HANDLE target_process = remote_target_process.IsValid() ? remote_target_process : ::GetCurrentProcess(); .... }
V623ãïŒïŒãæŒç®åã®æ€æ»ãæ€èšããŠãã ããã ãGenericScopedHandleãã¿ã€ãã®äžæãªããžã§ã¯ããäœæããããã®åŸç Žæ£ãããŸãã 第3ãªãã©ã³ãã確èªããŠãã ããã handle_policy.cc 81
èŠãããN7-éè€ãã§ãã¯
string16 GetAccessString(HandleType handle_type, ACCESS_MASK access) { .... if (access & FILE_WRITE_ATTRIBUTES) output.append(ASCIIToUTF16("\tFILE_WRITE_ATTRIBUTES\n")); if (access & FILE_WRITE_DATA) output.append(ASCIIToUTF16("\tFILE_WRITE_DATA\n")); if (access & FILE_WRITE_EA) output.append(ASCIIToUTF16("\tFILE_WRITE_EA\n")); if (access & FILE_WRITE_EA) output.append(ASCIIToUTF16("\tFILE_WRITE_EA\n")); .... }
V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ176ã178ãhandle_enumerator_win.cc 178
FILE_WRITE_EAãã©ã°ãèšå®ãããŠããå Žåããã¬ã€ã³ã\ tFILE_WRITE_EA \ nãã2åè¿œå ãããŸãã éåžžã«çãããã³ãŒãã
åæ§ã®å¥åŠãªç»åãããã§èŠ³å¯ã§ããŸãïŒ
static bool PasswordFormComparator(const PasswordForm& pf1, const PasswordForm& pf2) { if (pf1.submit_element < pf2.submit_element) return true; if (pf1.username_element < pf2.username_element) return true; if (pf1.username_value < pf2.username_value) return true; if (pf1.username_value < pf2.username_value) return true; if (pf1.password_element < pf2.password_element) return true; if (pf1.password_value < pf2.password_value) return true; return false; }
V581äºãã«äžŠãã§ãããifãæŒç®åã®æ¡ä»¶åŒã¯åäžã§ãã è¡ã確èªããŠãã ããïŒ259ã261ãprofile_sync_service_password_unittest.cc 261
ãpf1.username_value <pf2.username_valueããã§ãã¯ã¯2åç¹°ãè¿ãããŸãã ãã¶ãã1è¡ã ãã§ã¯äžèŠã§ãã ãããã¯ãä»ã®äœãããã§ãã¯ããã®ãå¿ããŠããŸã£ããç°ãªãæ¡ä»¶ãèšè¿°ããå¿ èŠããããŸãã
èŠãããN8-ãã¯ã³ã¿ã€ã ããµã€ã¯ã«
ResourceProvider::ResourceId PictureLayerImpl::ContentsResourceId() const { .... for (PictureLayerTilingSet::CoverageIterator iter(....); iter; ++iter) { if (!*iter) return 0; const ManagedTileState::TileVersion& tile_version = ....; if (....) return 0; if (iter.geometry_rect() != content_rect) return 0; return tile_version.get_resource_id(); } return 0; }
V612ã«ãŒãå ã®ç¡æ¡ä»¶ã®ãæ»ããã picture_layer_impl.cc 638
ãã®ãµã€ã¯ã«ã«ã¯äœãåé¡ããããŸãã ã«ãŒãã¯1åã ãå埩ãå®è¡ããŸãã ã«ãŒãã®æåŸã«ã¯ãç¡æ¡ä»¶ã®returnã¹ããŒãã¡ã³ãããããŸãã èããããçç±ïŒ
- ã ãããããã¯æ§æ³ãããŠããŸãã ããããããã¯éåžžã«çãããã§ãã ã«ãŒããäœæããããå埩åãäœæãããããã®ã¯ãªãã§ããã
- ããªã¿ãŒã³ãã®1ã€ã§ã¯ãªãããç¶ç¶ããèšè¿°ããå¿ èŠããããŸãã ããããŸãçãããã
- æãå¯èœæ§ãé«ãã®ã¯ãæåŸã®ããªã¿ãŒã³ãã®åã«äœããã®æ¡ä»¶ãæ¬ èœããŠããããšã§ãã
1åã ãå®è¡ãããä»ã®å¥åŠãªã«ãŒãããããŸãã
scoped_ptr<ActionInfo> ActionInfo::Load(....) { .... for (base::ListValue::const_iterator iter = icons->begin(); iter != icons->end(); ++iter) { std::string path; if (....); return scoped_ptr<ActionInfo>(); } result->default_icon.Add(....); break; } .... }
V612ã«ãŒãå ã®ç¡æ¡ä»¶ã®ããã¬ãŒã¯ãã action_info.cc 76
const BluetoothServiceRecord* BluetoothDeviceWin::GetServiceRecord( const std::string& uuid) const { for (ServiceRecordList::const_iterator iter = service_record_list_.begin(); iter != service_record_list_.end(); ++iter) { return *iter; } return NULL; }
V612ã«ãŒãå ã®ç¡æ¡ä»¶ã®ãæ»ããã bluetooth_device_win.cc 224
N9ã§è¡šç€º-åæåãããŠããªãå€æ°
HRESULT IEEventSink::Attach(IWebBrowser2* browser) { DCHECK(browser); HRESULT result; if (browser) { web_browser2_ = browser; FindIEProcessId(); result = DispEventAdvise(web_browser2_, &DIID_DWebBrowserEvents2); } return result; }
V614æœåšçã«åæåãããŠããªãå€æ° 'result'ã䜿çšãããŸããã ie_event_sink.cc 240
ããã©ãŠã¶ããã€ã³ã¿ããŒãã®å Žåãé¢æ°ã¯åæåãããŠããªãå€æ°ãè¿ããŸãã
å¥ã®ã³ãŒãïŒ
void SavePackage::GetSaveInfo() { .... bool skip_dir_check; .... if (....) { ....->GetSaveDir(...., &skip_dir_check); } .... BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind(..., skip_dir_check, ...)); }
V614æœåšçã«åæåãããŠããªãå€æ° 'skip_dir_check'ã䜿çšãããŸããã ããã€ã³ããé¢æ°ã®5çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã save_package.cc 1326
å€æ° 'skip_dir_check'ã¯åæåãããªããŸãŸã«ãªãå ŽåããããŸãã
N10ã«æ³šæ-ã³ãŒãã®ã¢ã©ã€ã¡ã³ãããã®æäœã®ããžãã¯ãšäžèŽããªã
void OnTraceNotification(int notification) { if (notification & TraceLog::EVENT_WATCH_NOTIFICATION) ++event_watch_notification_; notifications_received_ |= notification; }
V640ã³ãŒãã®æäœããžãã¯ããã®ãã©ãŒãããã«å¯Ÿå¿ããŠããŸããã ã¹ããŒãã¡ã³ãã¯å³åŽã«ã€ã³ãã³ããããŸãããåžžã«å®è¡ãããŸãã äžæ¬åŒ§ãæ¬ èœããŠããå¯èœæ§ããããŸãã trace_event_unittest.cc 57
ãã®ãããªã³ãŒããèãããšãäžæ¬åŒ§ãããã§å¿ããããŠãããã©ããã¯æããã§ã¯ãããŸããã ã³ãŒããæ£ããå Žåã§ããä»ã®ããã°ã©ããŒãææ ®æ·±ãç¶æ ã«ãªããªãããã«ä¿®æ£ããå¿ èŠããããŸãã
ããã«ãéåžžã«çãããã³ãŒãé 眮ãããå Žæãããã€ã瀺ããŸãã
- nss_memio.c 152
- nss_memio.c 184
N11ã«æ³šç®-æ°ããåŸã®ãã€ã³ã¿ãŒãã§ãã¯
å€ãã®ããã°ã©ã ã«ã¯ããnewãæŒç®åãäŸå€ãã¹ããŒããªãã£ãæ代ã«æžãæ»ãããå€ãã¬ã¬ã·ãŒã³ãŒãããããŸãã 以åã¯ãã¡ã¢ãªãäžååãªå Žåãnullãã€ã³ã¿ãè¿ããŠããŸããã
ãã®ç¹ã§ChromiumãäŸå€ã§ã¯ãªãããã®ãããªãã§ãã¯ãå«ãŸããŠããŸãã åé¡ã¯ãæå³ã®ãªããã§ãã¯ãå®è¡ãããããšã§ã¯ãããŸããã NULLãã€ã³ã¿ãŒã§ã¯ãããã€ãã®ã¢ã¯ã·ã§ã³ãåã«å®è¡ããå¿ èŠããã£ãããé¢æ°ãç¹å®ã®å€ãè¿ãããšã¯å±éºã§ãã çŸåšãäŸå€ã®çæã«ãããäœæ¥ã®ããžãã¯ãå€æŽãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã§å¶åŸ¡ãäžããããã¹ãã ã£ãã³ãŒãã¯ãçŸåšã¯éã¢ã¯ãã£ãã§ãã
äŸãèããŠã¿ãŸãããïŒ
static base::DictionaryValue* GetDictValueStats( const webrtc::StatsReport& report) { .... DictionaryValue* dict = new base::DictionaryValue(); if (!dict) return NULL; dict->SetDouble("timestamp", report.timestamp); base::ListValue* values = new base::ListValue(); if (!values) { delete dict; return NULL; } .... }
V668ãnewãæŒç®åã䜿çšããŠã¡ã¢ãªãå²ãåœãŠãããããããdictããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããŠãæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã peer_connection_tracker.cc 164
V668ã¡ã¢ãªãŒããæ°èŠãæŒç®åã䜿çšããŠå²ãæ¯ãããããããå€ããã€ã³ã¿ãŒããã«ã«å¯ŸããŠãã¹ãããŠãæå³ããããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã peer_connection_tracker.cc 169
æåã®ãã§ãã¯ãifïŒïŒDictïŒreturn NULL;ãã¯å®³ãåãŒããªãå¯èœæ§ããããŸãã ãããã2çªç®ã®ãã§ãã¯ã¯ããã«æªãã§ãã ãnew base :: ListValueïŒïŒãã䜿çšããŠãªããžã§ã¯ããäœæãããšãã«ã¡ã¢ãªãå²ãåœãŠãããšãã§ããªãå ŽåãäŸå€ 'std :: bad_alloc'ãã¹ããŒãããŸãã ããã§ãGetDictValueStatsïŒïŒé¢æ°ã®æäœãå®äºããŸããã
çµæãšããŠããã®ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
if (!values) { delete dict; return NULL; }
ã¢ãã¬ã¹ããdictãå€æ°ã«æ ŒçŽãããŠãããªããžã§ã¯ãã決ããŠç Žå£ããŸããã
ããã§ã®æ£ãã解決çã¯ãã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããã¹ããŒããã€ã³ã¿ãŒã䜿çšããããšã§ãã
å¥ã®ã³ãŒããæ€èšããŠãã ããã
bool Target::Init() { { .... ctx_ = new uint8_t[abi_->GetContextSize()]; if (NULL == ctx_) { Destroy(); return false; } .... }
V668ã¡ã¢ãªã¯ãnewãæŒç®åã䜿çšããŠå²ãåœãŠãããããããctx_ããã€ã³ã¿ãŒãnullã«å¯ŸããŠãã¹ãããæå³ã¯ãããŸããã ã¡ã¢ãªå²ãåœãŠãšã©ãŒã®å ŽåãäŸå€ãçæãããŸãã target.cc 73
ã¡ã¢ãªå²ãåœãŠãšã©ãŒãçºçããå ŽåãDestroyïŒïŒé¢æ°ã¯åŒã³åºãããŸããã
ããã«ã€ããŠããã«æžãã®ã¯é¢çœããªãã ã³ãŒãå ã§æ°ä»ããä»ã®æœåšçã«å±éºãªå Žæã®ãªã¹ããç°¡åã«ç€ºããŸãã
- ãããŒã¿ããã€ã³ã¿ãŒã target.cc 109
- ãpage_dataããã€ã³ã¿ãŒã mock_printer.cc 229
- ãã¢ãžã¥ãŒã«ããã€ã³ã¿ãŒã pepper_entrypoints.cc 39
- ãc_protocolsããã€ã³ã¿ãŒã websocket.cc 44
- ãtype_enumããã€ã³ã¿ãŒã pin_base_win.cc 96
- ãpin_enumããã€ã³ã¿ãŒã filter_base_win.cc 75
- ãport_dataãã port_monitor.cc 388
- ãxcv_dataããã€ã³ã¿ãŒã port_monitor.cc 552
- ãmonitor_dataãã port_monitor.cc 625
- ãsender_ããã€ã³ã¿ãŒã crash_service.cc 221
- ããã£ãã·ã¥ããã€ã³ã¿ãŒã crash_cache.cc 269
- ãcurrent_browserããã€ã³ã¿ãŒã print_preview_dialog_controller.cc 403
- ãudp_socketããã€ã³ã¿ãŒã network_stats.cc 212
- ãpopup_ããã€ã³ã¿ãŒã try_chrome_dialog_view.cc 90
èŠãããN12-ãã¹ããäžååãªãã¹ã
åäœãã¹ãã¯ãããã°ã©ã ã®å質ãåäžãããçŽ æŽãããæè¡ã§ãã ãã ãããã¹ãèªäœã«ã¯å€ãã®å Žåãšã©ãŒãå«ãŸããŠããããã®çµæããã¹ãã¯æ©èœãæãããŸããã ãã¡ããããã¹ãçšã®ãã¹ããæžãã®ã¯å€ãããŸãã éçã³ãŒãåæã圹ç«ã¡ãŸãã ãã®ã¢ã€ãã¢ã«ã€ããŠã¯ãèšäºã éçåæãTDDãè£è¶³ããæ¹æ³ ãã§è©³ããæ€èšããŸããã
Chromiumã®ãã¹ãã§çºçãããšã©ãŒã®äŸã次ã«ç€ºããŸãã
std::string TestAudioConfig::TestValidConfigs() { .... static const uint32_t kRequestFrameCounts[] = { PP_AUDIOMINSAMPLEFRAMECOUNT, PP_AUDIOMAXSAMPLEFRAMECOUNT, 1024, 2048, 4096 }; .... for (size_t j = 0; j < sizeof(kRequestFrameCounts)/sizeof(kRequestFrameCounts); j++) { .... }
V501ã/ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãsizeofïŒkRequestFrameCountsïŒãããããŸãã test_audio_config.cc 56
ã«ãŒãã§å®è¡ããããã¹ãã¯1ã€ã ãã§ãã ãšã©ãŒã¯ããsizeofïŒkRequestFrameCountsïŒ/ sizeofïŒkRequestFrameCountsïŒãã1ã€ã§ããããšã§ãã æ£ããåŒã¯ãsizeofïŒkRequestFrameCountsïŒ/ sizeofïŒkRequestFrameCounts [0]ïŒãã§ãã
å¥ã®ãšã©ãŒãã¹ãïŒ
void DiskCacheEntryTest::ExternalSyncIOBackground(....) { .... scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); .... EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); .... }
V549 'memcmp'é¢æ°ã®æåã®åŒæ°ã¯2çªç®ã®åŒæ°ãšåãã§ãã entry_unittest.cc 393
memcmpïŒïŒé¢æ°ã¯ããããã¡ãšããèªèº«ãæ¯èŒããŸãã ãã®çµæããã¹ãã¯å¿ èŠãªãã¹ããå®è¡ããŸããã ã©ããããããã«ããã¯ãã§ãïŒ
EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), 10000));
ãããŠãä»ã®ãã¹ããçªç¶äžæããå¯èœæ§ã®ãããã¹ãã次ã«ç€ºããŸãã
static const int kNumPainters = 3; static const struct { const char* name; GPUPainter* painter; } painters[] = { { "CPU CSC + GPU Render", new CPUColorPainter() }, { "GPU CSC/Render", new GPUColorWithLuminancePainter() }, }; int main(int argc, char** argv) { .... // Run GPU painter tests. for (int i = 0; i < kNumPainters; i++) { scoped_ptr<GPUPainter> painter(painters[i].painter); .... }
V557é åã®ãªãŒããŒã©ã³ãå¯èœã§ãã ãiãã€ã³ããã¯ã¹ã®å€ã¯2ã«éããå¯èœæ§ããããŸããshader_bench.cc 152
ãããã以åã®ãç»å®¶ãã®é åã¯3ã€ã®èŠçŽ ã§æ§æãããŠããŸããã çŸåšããã®ãã¡ã®2ã€ã®ã¿ã§ãã å®æ° 'kNumPainters'ã®å€ã¯3ã®ãŸãŸã§ãã
ç§ã泚ç®ã«å€ãããšæããã¹ãã®ä»ã®å ŽæïŒ
V579æååé¢æ°ã¯ãåŒæ°ãšããŠãã€ã³ã¿ãŒãšãã®ãµã€ãºãåãåããŸãã ééããããããŸããã 2çªç®ã®åŒæ°ã調ã¹ãŸãã syncable_unittest.cc 1790
V579æååé¢æ°ã¯ãåŒæ°ãšããŠãã€ã³ã¿ãŒãšãã®ãµã€ãºãåãåããŸãã ééããããããŸããã 2çªç®ã®åŒæ°ã調ã¹ãŸãã syncable_unittest.cc 1800
V579æååé¢æ°ã¯ãåŒæ°ãšããŠãã€ã³ã¿ãŒãšãã®ãµã€ãºãåãåããŸãã ééããããããŸããã 2çªç®ã®åŒæ°ã調ã¹ãŸãã syncable_unittest.cc 1810
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ãããã©ãŠã¶ãŒããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ5489ã5493ãtesting_automation_provider.cc 5489
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ã 'waiting_for_.getïŒïŒ'ãã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ205ã222ãdownloads_api_unittest.cc 205
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpNPWindowããã€ã³ã¿ãŒã䜿çšãããŸããã ãã§ãã¯è¡ïŒ34ã35ãplugin_windowed_test.cc 34
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããpNPWindowããã€ã³ã¿ãŒã䜿çšãããŸããã 16ã20è¡ã確èªããŠãã ãããplugin_window_size_test.cc 16
V595 nulltextrã«å¯ŸããŠæ€èšŒãããåã«ããtextfield_view_ããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ182ã191ãnative_textfield_views_unittest.cc 182
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ã 'message_loop_'ãã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ53ã55ãtest_flash_message_loop.cc 53
See N13-å¯å€æ°ã®åŒæ°ãæã€é¢æ°
ãã¹ãŠã®ããã°ã©ã ã§ããšã©ãŒãåŠçããäžæ£ãªå ¥åããŒã¿ã«å¿çããããã«èšèšãããã³ãŒãã«å€ãã®æ¬ é¥ãèŠã€ãããŸãã ããã¯ããã®ãããªå Žæããã¹ãããã®ãé£ããããã§ãã ãããŠãååãšããŠããããã¯ãã¹ããããŠããŸããã ãã®çµæããšã©ãŒãçºçãããšãããã°ã©ã ã¯èšç»ãããã¯ããã«å¥åŠãªåäœãéå§ããŸãã
äŸïŒ
DWORD GetLastError(VOID); void TryOpenFile(wchar_t *path, FILE *output) { wchar_t path_expanded[MAX_PATH] = {0}; DWORD size = ::ExpandEnvironmentStrings( path, path_expanded, MAX_PATH - 1); if (!size) { fprintf(output, "[ERROR] Cannot expand \"%S\". Error %S.\r\n", path, ::GetLastError()); } .... }
V576圢åŒãæ£ãããããŸããã 'fprintf'é¢æ°ã®4çªç®ã®å®åŒæ°ã確èªããããšãæ€èšããŠãã ããã wchar_tåã·ã³ãã«ã®æååãžã®ãã€ã³ã¿ãŒãå¿ èŠã§ãã fs.cc 17
å€æ° 'size'ããŒãã®å Žåãããã°ã©ã ã¯ããã¹ãã¡ãã»ãŒãžããã¡ã€ã«ã«æžã蟌ãããšããŸãã ãããããã®ã¡ãã»ãŒãžã«ã¯æåŸã«ããªã€ãŒããå«ãŸããå¯èœæ§ããããŸãã ããã«ããã®ã³ãŒãã¯ã¢ã¯ã»ã¹éåã«ã€ãªããå¯èœæ§ããããŸã ã
æžã蟌ã¿ã«ã¯fprintfïŒïŒé¢æ°ã䜿çšããŸãã ãã®é¢æ°ã¯ãåŒæ°ã®ã¿ã€ããå¶åŸ¡ããŸããã 圌女ã¯ãæåŸã®åŒæ°ãæååãžã®ãã€ã³ã¿ã§ããããšãæåŸ ããŠããŸãã ãããå®éã«ã¯ãå®éã®åŒæ°ã¯æ°åïŒãšã©ãŒã³ãŒãïŒã§ãã ãã®çªå·ã¯ã¢ãã¬ã¹ã«å€æãããããã°ã©ã ãããã«ã©ã®ããã«åäœãããã¯äžæã§ãã
æ°ã¥ãããªã
ããäžåºŠãç§ã¯ã¡ãã»ãŒãžã®ãªã¹ããè¡šé¢çã«èŠãŠããã ãã®èšäºã§ã¯ã泚æãåŒãããã®ã ããåŒçšããŸããã ããã«ãèšäºã§æžãã以äžã®ããšã«æ°ä»ããŸããã ãã¹ãŠã説æãããšãèšäºãé·ãããŸãã ãããŠåœŒå¥³ã¯ãã§ã«å€§ããããŸãã
èªè ã«ãšã£ãŠããŸãé¢çœããªããšæãã»ã©å€ãã®ã³ãŒããæšãŠãŸããã æ確ã«ããããã«ãããã€ãã®äŸãæããŸãã
bool ManagedUserService::UserMayLoad( const extensions::Extension* extension, string16* error) const { if (extension_service && extension_service->GetInstalledExtension(extension->id())) return true; if (extension) { bool was_installed_by_default = extension->was_installed_by_default(); ..... } }
V595 nullptrã«å¯ŸããŠæ€èšŒãããåã«ããæ¡åŒµããã€ã³ã¿ãŒã䜿çšãããŸããã è¡ã確èªããŠãã ããïŒ277ã280ãmanaged_user_service.cc 277
æåã¯ãåŒãextension-> idïŒïŒãã§ãextensionããã€ã³ã¿ãŒãéåç §ãããŸãã 次ã«ããã®ãã€ã³ã¿ãŒããŒãã«çãããã©ããããã§ãã¯ãããŸãã
å€ãã®å Žåããã®ãããªã³ãŒãã«ã¯ãšã©ãŒãå«ãŸããŠããŸããã ãã€ã³ã¿ãåçŽã«ãŒãã«ããããšã¯ã§ããããã§ãã¯ã¯åé·ã§ãã ãããã£ãŠããã®ãããªå Žæããªã¹ãããã®ã¯æå³ããããŸãããééããç¯ããŠããšã©ãŒã«å¯ŸããŠå®å šã«æ©èœããã³ãŒããæäŸã§ããããã§ãã
æ°ä»ããªãããšãéžæããå¥ã®èšºæäŸã次ã«ç€ºããŸãã
bool WebMClusterParser::ParseBlock(....) { int timecode = buf[1] << 8 | buf[2]; .... if (timecode & 0x8000) timecode |= (-1 << 16); .... }
V610æªå®çŸ©ã®åäœã ã·ããæŒç®å '<<ã確èªããŠãã ããã å·Šã®ãªãã©ã³ã '-1'ã¯è² ã§ãã webm_cluster_parser.cc 217
æ£åŒã«ã¯ãè² ã®å€ã®ã·ããã¯æªå®çŸ©ã®åäœã«ã€ãªãããŸã ã ãã ããå€ãã®ã³ã³ãã€ã©ã¯ãããã°ã©ããæåŸ ãããšããã«å®å®ããŠæ£ç¢ºã«åäœããŸãã ãã®çµæããã®ã³ãŒãã¯å¿ é ã§ã¯ãããŸããããé·æéæ£åžžã«æ©èœããŸãã ç§ã¯ä»ãããšæŠãæ°ã¯ãããŸããããããŠãã®ãããªã¡ãã»ãŒãžãèŠéããŸãã ãã®åé¡ããã詳现ã«ç解ããã人ã«ã¯ãã ãã©ãŒããç¥ããªããŠããæ°Žã«å ¥ããªãã§ãã ãã-ããŒã3 ããšããèšäºããå§ãããŸãã
誀æ€ç¥ã«ã€ããŠ
ãã質åãããŸãïŒ
èšäºã§ã¯ãçºèŠããããšã©ãŒã®äŸãéåžžã«å·§ã¿ã«åŒçšããŠããŸãã ãã ããçºè¡ãããã¡ãã»ãŒãžã®ç·æ°ã¯äœãšèšããã¯ããããŸããã å€ãã®å Žåãéçã¢ãã©ã€ã¶ãŒã¯å€ãã®èª€æ€ç¥ãçæãããã®äžã§å®éã®ãšã©ãŒãèŠã€ããããšã¯ã»ãšãã©äžå¯èœã§ãã PVS-Studioã¢ãã©ã€ã¶ãŒã®ç¶æ³ã¯ã©ãã§ããïŒ
ãããŠãç§ã¯ãã€ããã®è³ªåã«ããã«çããã¹ããåãããªãã ç§ã¯2ã€ã®æ£å察ã®çããæã£ãŠããŸãïŒ1ã€ç®ã¯ããããããã2ã€ç®ã¯ååã§ã¯ãããŸããã ããã¯ãã¹ãŠãçºè¡ãããã¡ãã»ãŒãžãªã¹ãã®æ€èšã«ã©ã®ããã«ã¢ãããŒããããã«äŸåããŸãã 次ã«ãChromiumã®äŸã䜿çšããŠããã®ãããªäºéæ§ã®æ¬è³ªã説æããŸãã
PVS-Studioã¢ãã©ã€ã¶ãŒã¯ã 3582ã®ç¬¬1ã¬ãã«ã®ã¢ã©ãŒãïŒGAäžè¬ã«ãŒã«ã»ããïŒãçæããŸããã ããã¯ãããããããŸãã ãããŠããããã®ã¡ãã»ãŒãžã®ã»ãšãã©ã¯åœã§ãã ãçæ£é¢ãããé²ãã§ããªã¹ãå šäœãããã«é²èŠ§ãå§ãããšãããã«ç²ããŠããŸããŸãã ãããŠãå°è±¡ã¯ã²ã©ããã®ã«ãªããŸãã åãã¿ã€ãã®ããã€ãã®åºäœèª€æ€ç¥ãèå³æ·±ããã®ã¯äœããããŸãããæªãããŒã«ã
ãã®ãããªãŠãŒã¶ãŒã®ééãã¯ãæå°éã®ããŒã«ã®ã»ããã¢ããã§ããå®äºããŠããªãããšã§ããã¯ããPVS-StudioããŒã«ãäœæããŠãã€ã³ã¹ããŒã«åŸããã«åäœããããã«ããŸããäœãèšå®ããå¿ èŠããªãããã«ããŸãã人ã¯åã«èªåã®ãããžã§ã¯ãããã§ãã¯ããçºè¡ãããèŠåã®ãªã¹ãã調ã¹ãå¿ èŠããããŸãã
ãã ããããã¯åžžã«ããŸããããšã¯éããŸãããããã¯Chromiumã§ã¯æ©èœããŸããã§ãããããšãã°ããã¯ããDVLOGããåå ã§èšå€§ãªæ°ã®èª€ã£ãã¡ãã»ãŒãžãçºçããŸããããã®ãã¯ãã¯äœããèšé²ããŠããŸããããã¯å·§åŠã«æžãããŠãããPVS-Studioã¯èª€ã£ãŠããå¯èœæ§ããããšèª€ã£ãŠèããŠããŸããããã¯ãã¯éåžžã«ç©æ¥µçã«äœ¿çšãããŠãããããå€ãã®èª€ã£ãã¡ãã»ãŒãžãå€æããŸããã DVLOGãã¯ããäœå䜿çšãããŠããããããããããã¬ããŒãã«ã¯å€ãã®èª€ã£ãèŠåãå ¥ããŸããã€ãŸãããã¯ãã«ã€ããŠçŽ2300ã®åœã¡ãã»ãŒãžãV501 There is same sub-expressions .....ããçºè¡ãããŸããã
ãã¯ã宣èšã®æšªã«ããããããŒãã¡ã€ã«ã«æžã蟌ãããšã§ããããã®èŠåãæå¶ããããšãã§ããŸããã³ã¡ã³ãã¯æ¬¡ã®
ãšããã§ãã//-VïŒDVLOGïŒ501
èŠãŠãã ãããã¡ãã»ãŒãžã®65ïŒ ãããã«åé€ããŸããããããŠä»ãããããç¡é§ã«èŠãå¿ èŠã¯ãããŸããã
å€ãã®åŽåããããã«ããããã®æ¹è¯ãšèšå®ãããã«ããã€ãè¡ãããšãã§ããŸãããã®çµæãã»ãšãã©ã®èª€æ€ç¥ã¯æ¶ããŸããå Žåã«ãã£ãŠã¯ããã¥ãŒãã³ã°åŸã«åæãåéããå¿ èŠããããŸãããããã§ãªãå ŽåããããŸããããã«ã€ããŠã¯ãããã¥ã¡ã³ãã»ã¯ã·ã§ã³ã誀èŠåã®æå¶ãã§è©³ãã説æããŠããŸããç¹ã«ããã¯ãã§ãšã©ãŒãçºçããå Žåã¯ãåæãåéããå¿ èŠããããŸãã
ã¯ã£ããããŠããããšãé¡ã£ãŠããŸãããªãæåã®çããªã®ã-å€ãã®èª€æ€ç¥ããããŸãããããŠããªã2çªç®ã®çã-誀æ€ç¥ã¯ã»ãšãã©ãããŸãããããã¯ãã¹ãŠã人ãå°ãªããšãå°ãæéããããŠè£œåãç 究ããæºåãã§ããŠãããã©ãããšãäžå¿ èŠãªã¡ãã»ãŒãžãã身ââãå®ãæ¹æ³ã«ããã£ãŠããŸãã
èªè ãžã®å¥ãã®èšè
ç§ã¯ãã®æ©äŒã«äž¡èŠªã«æšæ¶ããŸãããããããã¯äœãããããããã®æ©äŒãå©çšããŠãç§ã¯ããã°ã©ããŒã«æšæ¶ãäŒãããããæãåºãããïŒ
- ããããžã§ã¯ãã§èŠã€ãã£ããã°ãéçºè ã«å ±åããŸãããïŒããšãã質åã«å¯Ÿããåçã¯ããèšäºãèªãã åŸã«ããèããã質åãžã®åçããšããã¡ã¢ã«ãããŸãã
- ãŠã§ããµã€ãã®ãã£ãŒãããã¯ãã©ãŒã ã䜿çšããŠããåãåãããã ããããã®ããã«ãã€ãã¿ãŒã䜿çšãããããµãŒãããŒãã£ã®ãµã€ãã®ã©ããã«èšäºã«ã³ã¡ã³ããä»ãããããªãã§ãã ããã
- twitterïŒ@Code_Analysisã«ãåå ãã ãããç§ã¯ãããã°ã©ãã³ã°ã®ãããã¯ãšC ++èšèªã«é¢ããèå³æ·±ããªã³ã¯ãåžžã«åéããŠå ¬éããŠããŸãã