[{"data":1,"prerenderedAt":1860},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc54-cpp":28,"surround-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc54-cpp":1150,"sidebar-sei-cert-cpp-coding-standard":1158},[4,8],{"title":5,"path":6,"_path":6,"fromAppConfig":7},"Home","\u002F",true,{"title":9,"path":10,"children":11,"_path":27,"fromAppConfig":7},"Coding Standards","\u002Fcoding-standards\u002F",[12,15,18,21,24],{"title":13,"path":14},"Android Coding Standard","\u002Fandroid-secure-coding-standard\u002F",{"title":16,"path":17},"C Coding Standard","\u002Fsei-cert-c-coding-standard\u002F",{"title":19,"path":20},"C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002F",{"title":22,"path":23},"Java Coding Standard","\u002Fsei-cert-oracle-coding-standard-for-java\u002F",{"title":25,"path":26},"Perl Coding Standard","\u002Fsei-cert-perl-coding-standard\u002F","\u002Fcoding-standards",{"id":29,"title":30,"body":31,"description":1133,"extension":1134,"meta":1135,"navigation":7,"path":1146,"seo":1147,"stem":1148,"__hash__":1149},"content\u002F5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F5.msc54-cpp.md","MSC54-CPP. A signal handler must be a plain old function",{"type":32,"value":33,"toc":1122},"minimark",[34,38,48,54,57,67,80,83,113,116,121,131,263,267,274,360,363,378,524,527,561,786,790,804,870,874,1010,1014,1028,1032,1066,1070,1093,1096,1118],[35,36,30],"h1",{"id":37},"msc54-cpp-a-signal-handler-must-be-a-plain-old-function",[39,40,41,42,47],"p",{},"The C++14 Standard, [support.runtime], paragraph 10 [ ",[43,44,46],"a",{"href":45},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-ISO\u002FIEC14882-2014","ISO\u002FIEC 14882-2014"," ] , states the following:",[49,50,51],"blockquote",{},[39,52,53],{},"The common subset of the C and C++ languages consists of all declarations, definitions, and expressions that may appear in a well-formed C++ program and also in a conforming C program. A POF (“plain old function”) is a function that uses only features from this common subset, and that does not directly or indirectly use any function that is not a POF, except that it may use plain lock-free atomic operations. A plain lock-free atomic operation is an invocation of a function f from Clause 29, such that f is not a member function, and either f is the function atomic_is_lock_free, or for every atomic argument A passed to f, atomic_is_lock_free(A) yields true. All signal handlers shall have C linkage. The behavior of any function other than a POF used as a signal handler in a C++ program is implementation-defined.228",[39,55,56],{},"Footnote 228 states the following:",[49,58,59],{},[39,60,61,62,66],{},"In particular, a signal handler using exception handling is very likely to have problems. Also, invoking ",[63,64,65],"code",{},"std::exit"," may cause destruction of objects, including those of the standard library implementation, which, in general, yields undefined behavior in a signal handler.",[39,68,69,70,74,75,79],{},"If your signal handler is not a plain old function, then the behavior of a call to it in response to a signal is ",[43,71,73],{"href":72},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-implementation-definedbehavior","implementation-defined"," , at best, and is likely to result in ",[43,76,78],{"href":77},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-undefinedbehavior","undefined behavior"," . All signal handlers must meet the definition of a plain old function. In addition to the restrictions placed on signal handlers in a C program, this definition also prohibits the use of features that exist in C++ but not in C (such as non-POD [non–plain old data] objects and exceptions). This includes indirect use of such features through function calls.",[39,81,82],{},"In C++17, the wording has changed and relaxed some of the constraints on signal handlers. Section [support.signal], paragraph 3 says:",[49,84,85,88,110],{},[39,86,87],{},"An evaluation is signal-safe unless it includes one of the following:",[39,89,90,91,94,95,97,98,100,101,103,104,106,107,109],{},"— a call to any standard library function, except for plain lock-free atomic operations and functions explicitly identified as signal-safe. [ Note: This implicitly excludes the use of new and delete expressions that rely on a library-provided memory allocator. — end note ]",[92,93],"br",{},"\n— an access to an object with thread storage duration;",[92,96],{},"\n— a dynamic_cast expression;",[92,99],{},"\n— throwing of an exception;",[92,102],{},"\n— control entering a try-block or function-try-block ;",[92,105],{},"\n— initialization of a variable with static storage duration requiring dynamic initialization ( 6.6.3 , 9.7 ) 220 ; or",[92,108],{},"\n— waiting for the completion of the initialization of a variable with static storage duration ( 9.7 ).",[39,111,112],{},"A signal handler invocation has undefined behavior if it includes an evaluation that is not signal-safe.",[39,114,115],{},"Signal handlers in code that will be executed on C++17-compliant platforms must be signal-safe.",[117,118,120],"h2",{"id":119},"noncompliant-code-example","Noncompliant Code Example",[39,122,123,124,127,128,130],{},"In this noncompliant code example, the signal handler is declared as a ",[63,125,126],{},"static"," function. However, since all signal handler functions must have C language linkage, and C++ is the default language linkage for functions in C++, calling the signal handler results in ",[43,129,78],{"href":77}," .",[132,133,135],"code-block",{"quality":134},"bad",[136,137,142],"pre",{"className":138,"code":139,"language":140,"meta":141,"style":141},"language-cpp shiki shiki-themes github-light github-dark monokai","#include \u003Ccsignal>\n \nstatic void sig_handler(int sig) {\n  \u002F\u002F Implementation details elided.\n}\n\nvoid install_signal_handler() {\n  if (SIG_ERR == std::signal(SIGTERM, sig_handler)) {\n    \u002F\u002F Handle error\n  }\n}\n","cpp","",[63,143,144,157,164,190,197,203,209,221,246,252,258],{"__ignoreMap":141},[145,146,149,153],"span",{"class":147,"line":148},"line",1,[145,150,152],{"class":151},"sC2Qs","#include",[145,154,156],{"class":155},"sstjo"," \u003Ccsignal>\n",[145,158,160],{"class":147,"line":159},2,[145,161,163],{"class":162},"sMOD_"," \n",[145,165,167,169,173,177,180,183,187],{"class":147,"line":166},3,[145,168,126],{"class":151},[145,170,172],{"class":171},"sq6CD"," void",[145,174,176],{"class":175},"srTi1"," sig_handler",[145,178,179],{"class":162},"(",[145,181,182],{"class":171},"int",[145,184,186],{"class":185},"sTHNf"," sig",[145,188,189],{"class":162},") {\n",[145,191,193],{"class":147,"line":192},4,[145,194,196],{"class":195},"s8-w5","  \u002F\u002F Implementation details elided.\n",[145,198,200],{"class":147,"line":199},5,[145,201,202],{"class":162},"}\n",[145,204,206],{"class":147,"line":205},6,[145,207,208],{"emptyLinePlaceholder":7},"\n",[145,210,212,215,218],{"class":147,"line":211},7,[145,213,214],{"class":171},"void",[145,216,217],{"class":175}," install_signal_handler",[145,219,220],{"class":162},"() {\n",[145,222,224,227,230,233,237,240,243],{"class":147,"line":223},8,[145,225,226],{"class":151},"  if",[145,228,229],{"class":162}," (SIG_ERR ",[145,231,232],{"class":151},"==",[145,234,236],{"class":235},"sz2Vg"," std",[145,238,239],{"class":162},"::",[145,241,242],{"class":175},"signal",[145,244,245],{"class":162},"(SIGTERM, sig_handler)) {\n",[145,247,249],{"class":147,"line":248},9,[145,250,251],{"class":195},"    \u002F\u002F Handle error\n",[145,253,255],{"class":147,"line":254},10,[145,256,257],{"class":162},"  }\n",[145,259,261],{"class":147,"line":260},11,[145,262,202],{"class":162},[117,264,266],{"id":265},"compliant-solution","Compliant Solution",[39,268,269,270,273],{},"This compliant solution defines ",[63,271,272],{},"sig_handler()"," as having C language linkage. As a consequence of declaring the signal handler with C language linkage, the signal handler will have external linkage rather than internal linkage.",[132,275,277],{"quality":276},"good",[136,278,280],{"className":138,"code":279,"language":140,"meta":141,"style":141},"#include \u003Ccsignal>\n \nextern \"C\" void sig_handler(int sig) {\n  \u002F\u002F Implementation details elided.\n}\n\nvoid install_signal_handler() {\n  if (SIG_ERR == std::signal(SIGTERM, sig_handler)) {\n    \u002F\u002F Handle error\n  }\n}\n",[63,281,282,288,293,312,316,320,324,332,348,352,356],{"__ignoreMap":141},[145,283,284,286],{"class":147,"line":148},[145,285,152],{"class":151},[145,287,156],{"class":155},[145,289,290],{"class":147,"line":159},[145,291,292],{"class":162}," \n",[145,294,295,298,301,303,305,307,309],{"class":147,"line":166},[145,296,297],{"class":171},"extern",[145,299,300],{"class":155}," \"C\"",[145,302,172],{"class":171},[145,304,176],{"class":175},[145,306,179],{"class":162},[145,308,182],{"class":171},[145,310,311],{"class":162}," sig) {\n",[145,313,314],{"class":147,"line":192},[145,315,196],{"class":195},[145,317,318],{"class":147,"line":199},[145,319,202],{"class":162},[145,321,322],{"class":147,"line":205},[145,323,208],{"emptyLinePlaceholder":7},[145,325,326,328,330],{"class":147,"line":211},[145,327,214],{"class":171},[145,329,217],{"class":175},[145,331,220],{"class":162},[145,333,334,336,338,340,342,344,346],{"class":147,"line":223},[145,335,226],{"class":151},[145,337,229],{"class":162},[145,339,232],{"class":151},[145,341,236],{"class":235},[145,343,239],{"class":162},[145,345,242],{"class":175},[145,347,245],{"class":162},[145,349,350],{"class":147,"line":248},[145,351,251],{"class":195},[145,353,354],{"class":147,"line":254},[145,355,257],{"class":162},[145,357,358],{"class":147,"line":260},[145,359,202],{"class":162},[117,361,120],{"id":362},"noncompliant-code-example-1",[39,364,365,366,369,370,373,374,377],{},"In this noncompliant code example, a signal handler calls a function that allows exceptions, and it attempts to handle any exceptions thrown. Because exceptions are not part of the common subset of C and C++ features, this example results in ",[43,367,368],{"href":72},"implementation-defined behavior"," . However, it is unlikely that the implementation's behavior will be suitable. For instance, on a stack-based architecture where a signal is generated asynchronously (instead of as a result of a call to ",[63,371,372],{},"std:abort()"," or ",[63,375,376],{},"std::raise()"," ), it is possible that the stack frame is not properly initialized, causing stack tracing to be unreliable and preventing the exception from being caught properly.",[132,379,380],{"quality":134},[136,381,383],{"className":138,"code":382,"language":140,"meta":141,"style":141},"#include \u003Ccsignal>\n\nstatic void g() noexcept(false);\n\nextern \"C\" void sig_handler(int sig) {\n  try {\n    g();\n  } catch (...) {\n    \u002F\u002F Handle error\n  }\n}\n \nvoid install_signal_handler() {\n  if (SIG_ERR == std::signal(SIGTERM, sig_handler)) {\n    \u002F\u002F Handle error\n  }\n}\n",[63,384,385,391,395,419,423,439,447,455,466,470,474,478,483,492,509,514,519],{"__ignoreMap":141},[145,386,387,389],{"class":147,"line":148},[145,388,152],{"class":151},[145,390,156],{"class":155},[145,392,393],{"class":147,"line":159},[145,394,208],{"emptyLinePlaceholder":7},[145,396,397,399,401,404,407,410,412,416],{"class":147,"line":166},[145,398,126],{"class":151},[145,400,172],{"class":171},[145,402,403],{"class":175}," g",[145,405,406],{"class":162},"() ",[145,408,409],{"class":151},"noexcept",[145,411,179],{"class":162},[145,413,415],{"class":414},"s7F3e","false",[145,417,418],{"class":162},");\n",[145,420,421],{"class":147,"line":192},[145,422,208],{"emptyLinePlaceholder":7},[145,424,425,427,429,431,433,435,437],{"class":147,"line":199},[145,426,297],{"class":171},[145,428,300],{"class":155},[145,430,172],{"class":171},[145,432,176],{"class":175},[145,434,179],{"class":162},[145,436,182],{"class":171},[145,438,311],{"class":162},[145,440,441,444],{"class":147,"line":205},[145,442,443],{"class":151},"  try",[145,445,446],{"class":162}," {\n",[145,448,449,452],{"class":147,"line":211},[145,450,451],{"class":175},"    g",[145,453,454],{"class":162},"();\n",[145,456,457,460,463],{"class":147,"line":223},[145,458,459],{"class":162},"  } ",[145,461,462],{"class":151},"catch",[145,464,465],{"class":162}," (...) {\n",[145,467,468],{"class":147,"line":248},[145,469,251],{"class":195},[145,471,472],{"class":147,"line":254},[145,473,257],{"class":162},[145,475,476],{"class":147,"line":260},[145,477,202],{"class":162},[145,479,481],{"class":147,"line":480},12,[145,482,163],{"class":162},[145,484,486,488,490],{"class":147,"line":485},13,[145,487,214],{"class":171},[145,489,217],{"class":175},[145,491,220],{"class":162},[145,493,495,497,499,501,503,505,507],{"class":147,"line":494},14,[145,496,226],{"class":151},[145,498,229],{"class":162},[145,500,232],{"class":151},[145,502,236],{"class":235},[145,504,239],{"class":162},[145,506,242],{"class":175},[145,508,245],{"class":162},[145,510,512],{"class":147,"line":511},15,[145,513,251],{"class":195},[145,515,517],{"class":147,"line":516},16,[145,518,257],{"class":162},[145,520,522],{"class":147,"line":521},17,[145,523,202],{"class":162},[117,525,266],{"id":526},"compliant-solution-1",[39,528,529,530,533,534,536,537,540,541,543,544,546,547,549,550,553,554,557,558,560],{},"There is no compliant solution whereby ",[63,531,532],{},"g()"," can be called from the signal handler because it allows exceptions. Even if ",[63,535,532],{}," were implemented such that it handled all exceptions and was marked ",[63,538,539],{},"noexcept(true)"," , it would still be noncompliant to call ",[63,542,532],{}," from a signal handler because ",[63,545,532],{}," would still use a feature that is not a part of the common subset of C and C++ features allowed by a signal handler. Therefore, this compliant solution removes the call to ",[63,548,532],{}," from the signal handler and instead polls a variable of type ",[63,551,552],{},"  volatile sig_atomic_t "," periodically; if the variable is set to ",[63,555,556],{},"1"," in the signal handler, then ",[63,559,532],{}," is called to respond to the signal.",[132,562,563],{"quality":276},[136,564,566],{"className":138,"code":565,"language":140,"meta":141,"style":141},"#include \u003Ccsignal>\n\nvolatile sig_atomic_t signal_flag = 0;\nstatic void g() noexcept(false);\n\nextern \"C\" void sig_handler(int sig) {\n  signal_flag = 1;\n}\n\nvoid install_signal_handler() {\n  if (SIG_ERR == std::signal(SIGTERM, sig_handler)) {\n    \u002F\u002F Handle error\n  }\n}\n \n\u002F\u002F Called periodically to poll the signal flag.\nvoid poll_signal_flag() {\n  if (signal_flag == 1) {\n    signal_flag = 0;\n    try {\n      g();\n    } catch(...) {\n      \u002F\u002F Handle error\n    }\n  }\n}\n",[63,567,568,574,578,599,617,621,637,649,653,657,665,681,685,689,693,697,702,711,725,737,745,753,764,770,776,781],{"__ignoreMap":141},[145,569,570,572],{"class":147,"line":148},[145,571,152],{"class":151},[145,573,156],{"class":155},[145,575,576],{"class":147,"line":159},[145,577,208],{"emptyLinePlaceholder":7},[145,579,580,583,587,590,593,596],{"class":147,"line":166},[145,581,582],{"class":151},"volatile",[145,584,586],{"class":585},"s-m8C"," sig_atomic_t",[145,588,589],{"class":162}," signal_flag ",[145,591,592],{"class":151},"=",[145,594,595],{"class":414}," 0",[145,597,598],{"class":162},";\n",[145,600,601,603,605,607,609,611,613,615],{"class":147,"line":192},[145,602,126],{"class":151},[145,604,172],{"class":171},[145,606,403],{"class":175},[145,608,406],{"class":162},[145,610,409],{"class":151},[145,612,179],{"class":162},[145,614,415],{"class":414},[145,616,418],{"class":162},[145,618,619],{"class":147,"line":199},[145,620,208],{"emptyLinePlaceholder":7},[145,622,623,625,627,629,631,633,635],{"class":147,"line":205},[145,624,297],{"class":171},[145,626,300],{"class":155},[145,628,172],{"class":171},[145,630,176],{"class":175},[145,632,179],{"class":162},[145,634,182],{"class":171},[145,636,311],{"class":162},[145,638,639,642,644,647],{"class":147,"line":211},[145,640,641],{"class":162},"  signal_flag ",[145,643,592],{"class":151},[145,645,646],{"class":414}," 1",[145,648,598],{"class":162},[145,650,651],{"class":147,"line":223},[145,652,202],{"class":162},[145,654,655],{"class":147,"line":248},[145,656,208],{"emptyLinePlaceholder":7},[145,658,659,661,663],{"class":147,"line":254},[145,660,214],{"class":171},[145,662,217],{"class":175},[145,664,220],{"class":162},[145,666,667,669,671,673,675,677,679],{"class":147,"line":260},[145,668,226],{"class":151},[145,670,229],{"class":162},[145,672,232],{"class":151},[145,674,236],{"class":235},[145,676,239],{"class":162},[145,678,242],{"class":175},[145,680,245],{"class":162},[145,682,683],{"class":147,"line":480},[145,684,251],{"class":195},[145,686,687],{"class":147,"line":485},[145,688,257],{"class":162},[145,690,691],{"class":147,"line":494},[145,692,202],{"class":162},[145,694,695],{"class":147,"line":511},[145,696,163],{"class":162},[145,698,699],{"class":147,"line":516},[145,700,701],{"class":195},"\u002F\u002F Called periodically to poll the signal flag.\n",[145,703,704,706,709],{"class":147,"line":521},[145,705,214],{"class":171},[145,707,708],{"class":175}," poll_signal_flag",[145,710,220],{"class":162},[145,712,714,716,719,721,723],{"class":147,"line":713},18,[145,715,226],{"class":151},[145,717,718],{"class":162}," (signal_flag ",[145,720,232],{"class":151},[145,722,646],{"class":414},[145,724,189],{"class":162},[145,726,728,731,733,735],{"class":147,"line":727},19,[145,729,730],{"class":162},"    signal_flag ",[145,732,592],{"class":151},[145,734,595],{"class":414},[145,736,598],{"class":162},[145,738,740,743],{"class":147,"line":739},20,[145,741,742],{"class":151},"    try",[145,744,446],{"class":162},[145,746,748,751],{"class":147,"line":747},21,[145,749,750],{"class":175},"      g",[145,752,454],{"class":162},[145,754,756,759,761],{"class":147,"line":755},22,[145,757,758],{"class":162},"    } ",[145,760,462],{"class":151},[145,762,763],{"class":162},"(...) {\n",[145,765,767],{"class":147,"line":766},23,[145,768,769],{"class":195},"      \u002F\u002F Handle error\n",[145,771,773],{"class":147,"line":772},24,[145,774,775],{"class":162},"    }\n",[145,777,779],{"class":147,"line":778},25,[145,780,257],{"class":162},[145,782,784],{"class":147,"line":783},26,[145,785,202],{"class":162},[117,787,789],{"id":788},"risk-assessment","Risk Assessment",[39,791,792,793,795,796,798,799,803],{},"Failing to use a plain old function as a signal handler can result in ",[43,794,368],{"href":72}," as well as ",[43,797,78],{"href":77}," . Given the number of features that exist in C++ that do not also exist in C, the consequences that arise from failure to comply with this rule can range from benign (harmless) behavior to ",[43,800,802],{"href":801},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-abnormaltermination","abnormal program termination"," , or even arbitrary code execution.",[805,806,807,808,807,838],"table",{},"\n  ",[809,810,811,812,807],"thead",{},"\n    ",[813,814,815,816,815,820,815,823,815,826,815,829,815,832,815,835,811],"tr",{},"\n      ",[817,818,819],"th",{},"Rule",[817,821,822],{},"Severity",[817,824,825],{},"Likelihood",[817,827,828],{},"Detectable",[817,830,831],{},"Repairable",[817,833,834],{},"Priority",[817,836,837],{},"Level",[839,840,811,841,807],"tbody",{},[813,842,815,843,815,847,815,850,815,853,815,856,815,858,815,865,811],{},[844,845,846],"td",{},"MSC54-CPP",[844,848,849],{},"High",[844,851,852],{},"Probable",[844,854,855],{},"No",[844,857,855],{},[844,859,861],{"style":860},"color: #f1c40f;",[862,863,864],"b",{},"P6",[844,866,867],{"style":860},[862,868,869],{},"L2",[117,871,873],{"id":872},"automated-detection","Automated Detection",[805,875,878],{"className":876},[877],"wrapped",[839,879,880,904,934,958,982],{},[813,881,884,889,894,899],{"className":882},[883],"header",[817,885,886],{},[39,887,888],{},"Tool",[817,890,891],{},[39,892,893],{},"Version",[817,895,896],{},[39,897,898],{},"Checker",[817,900,901],{},[39,902,903],{},"Description",[813,905,908,914,924,930],{"className":906},[907],"odd",[844,909,910],{},[43,911,913],{"href":912},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fhelix-qac","Helix QAC",[844,915,916],{},[917,918,921],"div",{"className":919},[920],"content-wrapper",[39,922,923],{},"2025.2",[844,925,926],{},[927,928,929],"strong",{},"C++2888",[844,931,932],{},[92,933],{},[813,935,938,944,949,954],{"className":936},[937],"even",[844,939,940],{},[43,941,943],{"href":942},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fklocwork","Klocwork",[844,945,946],{},[917,947,923],{"className":948},[920],[844,950,951],{},[927,952,953],{},"CERT.MSC.SIG_HANDLER.POF",[844,955,956],{},[92,957],{},[813,959,961,967,972,979],{"className":960},[907],[844,962,963],{},[43,964,966],{"href":965},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fparasoft","Parasoft C\u002FC++test",[844,968,969],{},[917,970,923],{"className":971},[920],[844,973,974],{},[39,975,976],{},[927,977,978],{},"CERT_CPP-MSC54-a",[844,980,981],{},"Properly define signal handlers",[813,983,985,991,999,1007],{"className":984},[937],[844,986,987],{},[43,988,990],{"href":989},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpolyspace-bug-finder","Polyspace Bug Finder",[844,992,993],{},[917,994,996],{"className":995},[920],[39,997,998],{},"R2025b",[844,1000,1001],{},[39,1002,1003],{},[43,1004,1006],{"href":1005},"https:\u002F\u002Fwww.mathworks.com\u002Fhelp\u002Fbugfinder\u002Fref\u002Fcertcmsc54cpp.html","CERT C++: MSC54-CPP",[844,1008,1009],{},"Checks for unsafe signal handlers (rule fully covered)",[117,1011,1013],{"id":1012},"related-vulnerabilities","Related Vulnerabilities",[39,1015,1016,1017,1021,1022,130],{},"Search for ",[43,1018,1020],{"href":1019},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-vulnerab","vulnerabilities"," resulting from the violation of this rule on the ",[43,1023,1027],{"href":1024,"rel":1025},"https:\u002F\u002Fwww.kb.cert.org\u002Fvulnotes\u002Fbymetric?searchview&query=FIELD+KEYWORDS+contains+MSC54-CPP",[1026],"nofollow","CERT website",[117,1029,1031],{"id":1030},"related-guidelines","Related Guidelines",[805,1033,1035,1044],{"className":1034},[877],[1036,1037,1038,1042],"colgroup",{},[1039,1040],"col",{"style":1041},"width: 50%",[1039,1043],{"style":1041},[839,1045,1046],{},[813,1047,1049,1054],{"className":1048},[907],[844,1050,1051],{},[43,1052,1053],{"href":17},"SEI CERT C Coding Standard",[844,1055,1056,1060,1062],{},[43,1057,1059],{"href":1058},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fsignals-sig\u002Fsig30-c","SIG30-C. Call only asynchronous-safe functions within signal handlers",[92,1061],{},[43,1063,1065],{"href":1064},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fsignals-sig\u002Fsig31-c","SIG31-C. Do not access shared objects in signal handlers",[117,1067,1069],{"id":1068},"bibliography","Bibliography",[805,1071,1072,1080],{},[809,1073,1074],{},[813,1075,1076,1078],{},[817,1077],{},[817,1079],{},[839,1081,1082],{},[813,1083,1084,1090],{},[844,1085,1086,1087,1089],{},"[ ",[43,1088,46],{"href":45}," ]",[844,1091,1092],{},"Subclause 18.10, \"Other Runtime Support\"",[1094,1095],"hr",{},[39,1097,1098,1105,1106,1105,1112],{},[43,1099,1101],{"href":1100},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc53-cpp",[1102,1103],"img",{"src":1104},"\u002Fattachments\u002F88046682\u002F88480621.png"," ",[43,1107,1109],{"href":1108},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002F",[1102,1110],{"src":1111},"\u002Fattachments\u002F88046682\u002F88475556.png",[43,1113,1115],{"href":1114},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002F",[1102,1116],{"src":1117},"\u002Fattachments\u002F88046682\u002F88475555.png",[1119,1120,1121],"style",{},"html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sq6CD, html code.shiki .sq6CD{--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .srTi1, html code.shiki .srTi1{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sTHNf, html code.shiki .sTHNf{--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html pre.shiki code .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}html pre.shiki code .sz2Vg, html code.shiki .sz2Vg{--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .s-m8C, html code.shiki .s-m8C{--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}",{"title":141,"searchDepth":159,"depth":159,"links":1123},[1124,1125,1126,1127,1128,1129,1130,1131,1132],{"id":119,"depth":159,"text":120},{"id":265,"depth":159,"text":266},{"id":362,"depth":159,"text":120},{"id":526,"depth":159,"text":266},{"id":788,"depth":159,"text":789},{"id":872,"depth":159,"text":873},{"id":1012,"depth":159,"text":1013},{"id":1030,"depth":159,"text":1031},{"id":1068,"depth":159,"text":1069},"The C++14 Standard, [support.runtime], paragraph 10 [ ISO\u002FIEC 14882-2014 ] , states the following:","md",{"tags":1136},[1137,1138,1139,1140,1141,1142,1143,1144,1145],"review","review-dms","rule","nptc-complexity","notes","msc","review-ajb","no-autodetect","nptc","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc54-cpp",{"title":30,"description":1133},"5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F5.msc54-cpp","4jseKTmRM7YZ2NkpgbyejGloPNGjFHU12oSPOXc6JBY",[1151,1154],{"title":1152,"path":1100,"stem":1153,"children":-1},"MSC53-CPP. Do not return from a function declared [[noreturn]]","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F4.msc53-cpp",{"title":1155,"path":1156,"stem":1157,"children":-1},"rand() for generating pseudorandom numbers","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Frand-for-generating-pseudorandom-numbers","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F6.rand-for-generating-pseudorandom-numbers",[1159],{"title":1160,"path":1161,"stem":1162,"children":1163},"SEI CERT C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard","5.sei-cert-cpp-coding-standard\u002F1.index",[1164,1165,1232,1627,1846,1856],{"title":1160,"path":1161,"stem":1162},{"title":1166,"path":1167,"stem":1168,"children":1169},"Front Matter","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F1.index",[1170,1171],{"title":1166,"path":1167,"stem":1168},{"title":1172,"path":1173,"stem":1174,"children":1175},"Introduction","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F01.index",[1176,1177,1181,1185,1189,1193,1197,1201,1205,1209,1213,1217,1221,1225,1229],{"title":1172,"path":1173,"stem":1174},{"title":1178,"path":1179,"stem":1180},"Scope","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F02.scope",{"title":1182,"path":1183,"stem":1184},"Audience","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Faudience","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F03.audience",{"title":1186,"path":1187,"stem":1188},"Usage","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F04.usage",{"title":1190,"path":1191,"stem":1192},"How this Coding Standard Is Organized","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fhow-this-coding-standard-is-organized","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F05.how-this-coding-standard-is-organized",{"title":1194,"path":1195,"stem":1196},"Relation to the CERT C Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Frelation-to-the-cert-c-coding-standard","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F06.relation-to-the-cert-c-coding-standard",{"title":1198,"path":1199,"stem":1200},"Rules Versus Recommendations","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Frules-versus-recommendations","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F07.rules-versus-recommendations",{"title":1202,"path":1203,"stem":1204},"Tool Selection and Validation","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Ftool-selection-and-validation","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F08.tool-selection-and-validation",{"title":1206,"path":1207,"stem":1208},"Conformance Testing","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fconformance-testing","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F09.conformance-testing",{"title":1210,"path":1211,"stem":1212},"Development Process","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fdevelopment-process","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F10.development-process",{"title":1214,"path":1215,"stem":1216},"System Qualities","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fsystem-qualities","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F11.system-qualities",{"title":1218,"path":1219,"stem":1220},"Automatically Generated Code","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fautomatically-generated-code","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F12.automatically-generated-code",{"title":1222,"path":1223,"stem":1224},"Government Regulations","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fgovernment-regulations","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F13.government-regulations",{"title":1226,"path":1227,"stem":1228},"Acknowledgments","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgments","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F14.acknowledgments",{"title":873,"path":1230,"stem":1231},"\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fautomated-detection","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F15.automated-detection",{"title":1233,"path":1234,"stem":1235,"children":1236},"Rules","\u002Fsei-cert-cpp-coding-standard\u002Frules","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F01.index",[1237,1238,1260,1294,1336,1386,1444,1506,1520,1530,1568,1585],{"title":1233,"path":1234,"stem":1235},{"title":1239,"path":1240,"stem":1241,"children":1242},"Characters and Strings (STR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F1.index",[1243,1244,1248,1252,1256],{"title":1239,"path":1240,"stem":1241},{"title":1245,"path":1246,"stem":1247},"STR50-CPP. Guarantee that storage for strings has sufficient space for character data and the null terminator","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F2.str50-cpp",{"title":1249,"path":1250,"stem":1251},"STR52-CPP. Use valid references, pointers, and iterators to reference elements of a basic_string","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F3.str52-cpp",{"title":1253,"path":1254,"stem":1255},"STR53-CPP. Range check element access","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F4.str53-cpp",{"title":1257,"path":1258,"stem":1259},"string from a null pointer","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstring-from-a-null-pointer","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F5.string-from-a-null-pointer",{"title":1261,"path":1262,"stem":1263,"children":1264},"Concurrency (CON)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F1.index",[1265,1266,1270,1274,1278,1282,1286,1290],{"title":1261,"path":1262,"stem":1263},{"title":1267,"path":1268,"stem":1269},"CON50-CPP. Do not destroy a mutex while it is locked","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F2.con50-cpp",{"title":1271,"path":1272,"stem":1273},"CON51-CPP. Ensure actively held locks are released on exceptional conditions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F3.con51-cpp",{"title":1275,"path":1276,"stem":1277},"CON52-CPP. Prevent data races when accessing bit-fields from multiple threads","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F4.con52-cpp",{"title":1279,"path":1280,"stem":1281},"CON53-CPP. Avoid deadlock by locking in a predefined order","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F5.con53-cpp",{"title":1283,"path":1284,"stem":1285},"CON54-CPP. Wrap functions that can spuriously wake up in a loop","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F6.con54-cpp",{"title":1287,"path":1288,"stem":1289},"CON55-CPP. Preserve thread safety and liveness when using condition variables","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F7.con55-cpp",{"title":1291,"path":1292,"stem":1293},"CON56-CPP. Do not speculatively lock a non-recursive mutex that is already owned by the calling thread","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F8.con56-cpp",{"title":1295,"path":1296,"stem":1297,"children":1298},"Containers (CTR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F01.index",[1299,1300,1304,1308,1312,1316,1320,1324,1328,1332],{"title":1295,"path":1296,"stem":1297},{"title":1301,"path":1302,"stem":1303},"CTR50-CPP. Guarantee that container indices and iterators are within the valid range","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F02.ctr50-cpp",{"title":1305,"path":1306,"stem":1307},"CTR51-CPP. Use valid references, pointers, and iterators to reference elements of a container","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F03.ctr51-cpp",{"title":1309,"path":1310,"stem":1311},"CTR52-CPP. Guarantee that library functions do not overflow","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F04.ctr52-cpp",{"title":1313,"path":1314,"stem":1315},"CTR53-CPP. Use valid iterator ranges","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F05.ctr53-cpp",{"title":1317,"path":1318,"stem":1319},"CTR54-CPP. Do not subtract iterators that do not refer to the same container","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F06.ctr54-cpp",{"title":1321,"path":1322,"stem":1323},"CTR55-CPP. Do not use an additive operator on an iterator if the result would overflow","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F07.ctr55-cpp",{"title":1325,"path":1326,"stem":1327},"CTR56-CPP. Do not use pointer arithmetic on polymorphic objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F08.ctr56-cpp",{"title":1329,"path":1330,"stem":1331},"CTR57-CPP. Provide a valid ordering predicate","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F09.ctr57-cpp",{"title":1333,"path":1334,"stem":1335},"CTR58-CPP. Predicate function objects should not be mutable","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F10.ctr58-cpp",{"title":1337,"path":1338,"stem":1339,"children":1340},"Declarations and Initialization (DCL)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F01.index",[1341,1342,1346,1350,1354,1358,1362,1366,1370,1374,1378,1382],{"title":1337,"path":1338,"stem":1339},{"title":1343,"path":1344,"stem":1345},"DCL50-CPP. Do not define a C-style variadic function","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F02.dcl50-cpp",{"title":1347,"path":1348,"stem":1349},"DCL51-CPP. Do not declare or define a reserved identifier","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F03.dcl51-cpp",{"title":1351,"path":1352,"stem":1353},"DCL52-CPP. Never qualify a reference type with const or volatile","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F04.dcl52-cpp",{"title":1355,"path":1356,"stem":1357},"DCL53-CPP. Do not write syntactically ambiguous declarations","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F05.dcl53-cpp",{"title":1359,"path":1360,"stem":1361},"DCL54-CPP. Overload allocation and deallocation functions as a pair in the same scope","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F06.dcl54-cpp",{"title":1363,"path":1364,"stem":1365},"DCL55-CPP. Avoid information leakage when passing a class object across a trust boundary","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F07.dcl55-cpp",{"title":1367,"path":1368,"stem":1369},"DCL56-CPP. Avoid cycles during initialization of static objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F08.dcl56-cpp",{"title":1371,"path":1372,"stem":1373},"DCL57-CPP. Do not let exceptions escape from destructors or deallocation functions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F09.dcl57-cpp",{"title":1375,"path":1376,"stem":1377},"DCL58-CPP. Do not modify the standard namespaces","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F10.dcl58-cpp",{"title":1379,"path":1380,"stem":1381},"DCL59-CPP. Do not define an unnamed namespace in a header file","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F11.dcl59-cpp",{"title":1383,"path":1384,"stem":1385},"DCL60-CPP. Obey the one-definition rule","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F12.dcl60-cpp",{"title":1387,"path":1388,"stem":1389,"children":1390},"Exceptions and Error Handling (ERR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F01.index",[1391,1392,1396,1400,1404,1408,1412,1416,1420,1424,1428,1432,1436,1440],{"title":1387,"path":1388,"stem":1389},{"title":1393,"path":1394,"stem":1395},"ERR50-CPP. Do not abruptly terminate the program","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F02.err50-cpp",{"title":1397,"path":1398,"stem":1399},"ERR51-CPP. Handle all exceptions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F03.err51-cpp",{"title":1401,"path":1402,"stem":1403},"ERR52-CPP. Do not use setjmp() or longjmp()","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F04.err52-cpp",{"title":1405,"path":1406,"stem":1407},"ERR53-CPP. Do not reference base classes or class data members in a constructor or destructor function-try-block handler","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F05.err53-cpp",{"title":1409,"path":1410,"stem":1411},"ERR54-CPP. Catch handlers should order their parameter types from most derived to least derived","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F06.err54-cpp",{"title":1413,"path":1414,"stem":1415},"ERR55-CPP. Honor exception specifications","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F07.err55-cpp",{"title":1417,"path":1418,"stem":1419},"ERR56-CPP. Guarantee exception safety","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F08.err56-cpp",{"title":1421,"path":1422,"stem":1423},"ERR57-CPP. Do not leak resources when handling exceptions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F09.err57-cpp",{"title":1425,"path":1426,"stem":1427},"ERR58-CPP. Handle all exceptions thrown before main() begins executing","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F10.err58-cpp",{"title":1429,"path":1430,"stem":1431},"ERR59-CPP. Do not throw an exception across execution boundaries","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F11.err59-cpp",{"title":1433,"path":1434,"stem":1435},"ERR60-CPP. Exception objects must be nothrow copy constructible","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F12.err60-cpp",{"title":1437,"path":1438,"stem":1439},"ERR61-CPP. Catch exceptions by lvalue reference","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr61-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F13.err61-cpp",{"title":1441,"path":1442,"stem":1443},"ERR62-CPP. Detect errors when converting a string to a number","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr62-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F14.err62-cpp",{"title":1445,"path":1446,"stem":1447,"children":1448},"Expressions (EXP)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F01.index",[1449,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502],{"title":1445,"path":1446,"stem":1447},{"title":1451,"path":1452,"stem":1453},"EXP50-CPP. Do not depend on the order of evaluation for side effects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F02.exp50-cpp",{"title":1455,"path":1456,"stem":1457},"EXP51-CPP. Do not delete an array through a pointer of the incorrect type","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F03.exp51-cpp",{"title":1459,"path":1460,"stem":1461},"EXP52-CPP. Do not rely on side effects in unevaluated operands","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F04.exp52-cpp",{"title":1463,"path":1464,"stem":1465},"EXP53-CPP. Do not read uninitialized memory","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F05.exp53-cpp",{"title":1467,"path":1468,"stem":1469},"EXP54-CPP. Do not access an object outside of its lifetime","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F06.exp54-cpp",{"title":1471,"path":1472,"stem":1473},"EXP55-CPP. Do not access a cv-qualified object through a cv-unqualified type","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F07.exp55-cpp",{"title":1475,"path":1476,"stem":1477},"EXP56-CPP. Do not call a function with a mismatched language linkage","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F08.exp56-cpp",{"title":1479,"path":1480,"stem":1481},"EXP57-CPP. Do not cast or delete pointers to incomplete classes","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F09.exp57-cpp",{"title":1483,"path":1484,"stem":1485},"EXP58-CPP. Pass an object of the correct type to va_start","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F10.exp58-cpp",{"title":1487,"path":1488,"stem":1489},"EXP59-CPP. Use offsetof() on valid types and members","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F11.exp59-cpp",{"title":1491,"path":1492,"stem":1493},"EXP60-CPP. Do not pass a nonstandard-layout type object across execution boundaries","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F12.exp60-cpp",{"title":1495,"path":1496,"stem":1497},"EXP61-CPP. A lambda object must not outlive any of its reference captured objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp61-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F13.exp61-cpp",{"title":1499,"path":1500,"stem":1501},"EXP62-CPP. Do not access the bits of an object representation that are not part of the object's value representation","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp62-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F14.exp62-cpp",{"title":1503,"path":1504,"stem":1505},"EXP63-CPP. Do not rely on the value of a moved-from object","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp63-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F15.exp63-cpp",{"title":1507,"path":1508,"stem":1509,"children":1510},"Input Output (FIO)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F1.index",[1511,1512,1516],{"title":1507,"path":1508,"stem":1509},{"title":1513,"path":1514,"stem":1515},"FIO50-CPP. Do not alternately input and output from a file stream without an intervening positioning call","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio\u002Ffio50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F2.fio50-cpp",{"title":1517,"path":1518,"stem":1519},"FIO51-CPP. Close files when they are no longer needed","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio\u002Ffio51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F3.fio51-cpp",{"title":1521,"path":1522,"stem":1523,"children":1524},"Integers (INT)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fintegers-int","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F09.integers-int\u002F1.index",[1525,1526],{"title":1521,"path":1522,"stem":1523},{"title":1527,"path":1528,"stem":1529},"INT50-CPP. Do not cast to an out-of-range enumeration value","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fintegers-int\u002Fint50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F09.integers-int\u002F2.int50-cpp",{"title":1531,"path":1532,"stem":1533,"children":1534},"Memory Management (MEM)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F1.index",[1535,1536,1540,1544,1548,1552,1556,1560,1564],{"title":1531,"path":1532,"stem":1533},{"title":1537,"path":1538,"stem":1539},"MEM50-CPP. Do not access freed memory","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F2.mem50-cpp",{"title":1541,"path":1542,"stem":1543},"MEM51-CPP. Properly deallocate dynamically allocated resources","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F3.mem51-cpp",{"title":1545,"path":1546,"stem":1547},"MEM52-CPP. Detect and handle memory allocation errors","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F4.mem52-cpp",{"title":1549,"path":1550,"stem":1551},"MEM53-CPP. Explicitly construct and destruct objects when manually managing object lifetime","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F5.mem53-cpp",{"title":1553,"path":1554,"stem":1555},"MEM54-CPP. Provide placement new with properly aligned pointers to sufficient storage capacity","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F6.mem54-cpp",{"title":1557,"path":1558,"stem":1559},"MEM55-CPP. Honor replacement dynamic storage management requirements","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F7.mem55-cpp",{"title":1561,"path":1562,"stem":1563},"MEM56-CPP. Do not store an already-owned pointer value in an unrelated smart pointer","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F8.mem56-cpp",{"title":1565,"path":1566,"stem":1567},"MEM57-CPP. Avoid using default operator new for over-aligned types","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F9.mem57-cpp",{"title":1569,"path":1570,"stem":1571,"children":1572},"Miscellaneous (MSC)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F1.index",[1573,1574,1578,1582,1583,1584],{"title":1569,"path":1570,"stem":1571},{"title":1575,"path":1576,"stem":1577},"MSC51-CPP. Ensure your random number generator is properly seeded","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F2.msc51-cpp",{"title":1579,"path":1580,"stem":1581},"MSC52-CPP. Value-returning functions must return a value from all exit paths","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F3.msc52-cpp",{"title":1152,"path":1100,"stem":1153},{"title":30,"path":1146,"stem":1148},{"title":1155,"path":1156,"stem":1157},{"title":1586,"path":1587,"stem":1588,"children":1589},"Object Oriented Programming (OOP)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F01.index",[1590,1591,1595,1599,1603,1607,1611,1615,1619,1623],{"title":1586,"path":1587,"stem":1588},{"title":1592,"path":1593,"stem":1594},"OOP50-CPP. Do not invoke virtual functions from constructors or destructors","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F02.oop50-cpp",{"title":1596,"path":1597,"stem":1598},"OOP51-CPP. Do not slice derived objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F03.oop51-cpp",{"title":1600,"path":1601,"stem":1602},"OOP52-CPP. Do not delete a polymorphic object without a virtual destructor","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F04.oop52-cpp",{"title":1604,"path":1605,"stem":1606},"OOP53-CPP. Write constructor member initializers in the canonical order","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F05.oop53-cpp",{"title":1608,"path":1609,"stem":1610},"OOP54-CPP. Gracefully handle self-copy assignment","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F06.oop54-cpp",{"title":1612,"path":1613,"stem":1614},"OOP55-CPP. Do not use pointer-to-member operators to access nonexistent members","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F07.oop55-cpp",{"title":1616,"path":1617,"stem":1618},"OOP56-CPP. Honor replacement handler requirements","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F08.oop56-cpp",{"title":1620,"path":1621,"stem":1622},"OOP57-CPP. Prefer special member functions and overloaded operators to C Standard Library functions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F09.oop57-cpp",{"title":1624,"path":1625,"stem":1626},"OOP58-CPP. Copy operations must not mutate the source object","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F10.oop58-cpp",{"title":1628,"path":1629,"stem":1630,"children":1631},"Back Matter","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F1.index",[1632,1633,1637,1641,1828,1842],{"title":1628,"path":1629,"stem":1630},{"title":1634,"path":1635,"stem":1636},"AA. Bibliography","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F2.aa-bibliography",{"title":1638,"path":1639,"stem":1640},"BB. Definitions","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F3.bb-definitions",{"title":1642,"path":1643,"stem":1644,"children":1645},"CC. Analyzers","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F01.index",[1646,1647,1651,1655,1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699,1703,1707,1711,1715,1719,1723,1727,1731,1733,1737,1739,1743,1747,1751,1754,1758,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824],{"title":1642,"path":1643,"stem":1644},{"title":1648,"path":1649,"stem":1650},"Astrée","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fastree","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F02.astree",{"title":1652,"path":1653,"stem":1654},"Astrée_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fastree_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F03.astree_v",{"title":1656,"path":1657,"stem":1658},"Axivion Bauhaus Suite","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Faxivion-bauhaus-suite","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F04.axivion-bauhaus-suite",{"title":1660,"path":1661,"stem":1662},"Axivion Bauhaus Suite_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Faxivion-bauhaus-suite_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F05.axivion-bauhaus-suite_v",{"title":1664,"path":1665,"stem":1666},"Clang","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F06.clang",{"title":1668,"path":1669,"stem":1670},"Clang_38_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_38_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F07.clang_38_v",{"title":1672,"path":1673,"stem":1674},"Clang_39_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_39_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F08.clang_39_v",{"title":1676,"path":1677,"stem":1678},"Clang_40_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_40_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F09.clang_40_v",{"title":1680,"path":1681,"stem":1682},"Clang_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F10.clang_v",{"title":1684,"path":1685,"stem":1686},"Codee","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodee","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F11.codee",{"title":1688,"path":1689,"stem":1690},"Codee_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodee_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F12.codee_v",{"title":1692,"path":1693,"stem":1694},"CodeSonar","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodesonar","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F13.codesonar",{"title":1696,"path":1697,"stem":1698},"CodeSonar_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodesonar_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F14.codesonar_v",{"title":1700,"path":1701,"stem":1702},"Coverity","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcoverity","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F15.coverity",{"title":1704,"path":1705,"stem":1706},"Coverity_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcoverity_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F16.coverity_v",{"title":1708,"path":1709,"stem":1710},"ECLAIR","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Feclair","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F17.eclair",{"title":1712,"path":1713,"stem":1714},"ECLAIR_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Feclair_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F18.eclair_v",{"title":1716,"path":1717,"stem":1718},"EDG","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fedg","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F19.edg",{"title":1720,"path":1721,"stem":1722},"Edg_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fedg_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F20.edg_v",{"title":1724,"path":1725,"stem":1726},"GCC","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fgcc","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F21.gcc",{"title":1728,"path":1729,"stem":1730},"Gcc_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fgcc_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F22.gcc_v",{"title":913,"path":912,"stem":1732},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F23.helix-qac",{"title":1734,"path":1735,"stem":1736},"Helix QAC_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fhelix-qac_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F24.helix-qac_v",{"title":943,"path":942,"stem":1738},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F25.klocwork",{"title":1740,"path":1741,"stem":1742},"Klocwork_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fklocwork_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F26.klocwork_v",{"title":1744,"path":1745,"stem":1746},"LDRA","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fldra","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F27.ldra",{"title":1748,"path":1749,"stem":1750},"Ldra_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fldra_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F28.ldra_v",{"title":1752,"path":965,"stem":1753},"Parasoft","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F29.parasoft",{"title":1755,"path":1756,"stem":1757},"Parasoft_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fparasoft_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F30.parasoft_v",{"title":990,"path":989,"stem":1759},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F31.polyspace-bug-finder",{"title":1761,"path":1762,"stem":1763},"Polyspace Bug Finder_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpolyspace-bug-finder_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F32.polyspace-bug-finder_v",{"title":1765,"path":1766,"stem":1767},"PRQA QA-C++","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fprqa-qa-cpp","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F33.prqa-qa-cpp",{"title":1769,"path":1770,"stem":1771},"PRQA QA-C++_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fprqa-qa-cpp_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F34.prqa-qa-cpp_v",{"title":1773,"path":1774,"stem":1775},"PVS-Studio","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpvs-studio","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F35.pvs-studio",{"title":1777,"path":1778,"stem":1779},"PVS-Studio_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpvs-studio_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F36.pvs-studio_v",{"title":1781,"path":1782,"stem":1783},"Rose","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frose","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F37.rose",{"title":1785,"path":1786,"stem":1787},"Rose_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frose_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F38.rose_v",{"title":1789,"path":1790,"stem":1791},"RuleChecker","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frulechecker","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F39.rulechecker",{"title":1793,"path":1794,"stem":1795},"RuleChecker_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frulechecker_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F40.rulechecker_v",{"title":1797,"path":1798,"stem":1799},"Security Reviewer - Static Reviewer","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsecurity-reviewer-static-reviewer","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F41.security-reviewer-static-reviewer",{"title":1801,"path":1802,"stem":1803},"Security Reviewer - Static Reviewer_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsecurity-reviewer-static-reviewer_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F42.security-reviewer-static-reviewer_v",{"title":1805,"path":1806,"stem":1807},"Semgrep","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsemgrep","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F43.semgrep",{"title":1809,"path":1810,"stem":1811},"Semgrep_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsemgrep_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F44.semgrep_v",{"title":1813,"path":1814,"stem":1815},"SonarQube C\u002FC++ Plugin","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsonarqube-ccpp-plugin","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F45.sonarqube-ccpp-plugin",{"title":1817,"path":1818,"stem":1819},"SonarQube C\u002FC++ Plugin_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsonarqube-ccpp-plugin_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F46.sonarqube-ccpp-plugin_v",{"title":1821,"path":1822,"stem":1823},"Splint","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsplint","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F47.splint",{"title":1825,"path":1826,"stem":1827},"Splint_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsplint_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F48.splint_v",{"title":1829,"path":1830,"stem":1831,"children":1832},"DD. Related Guidelines","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F1.index",[1833,1834,1838],{"title":1829,"path":1830,"stem":1831},{"title":1835,"path":1836,"stem":1837},"2008","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines\u002F2.2008","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F2.2008",{"title":1839,"path":1840,"stem":1841},"MITRE CWE","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines\u002Fmitre-cwe","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F3.mitre-cwe",{"title":1843,"path":1844,"stem":1845},"EE. Risk Assessments","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fee-risk-assessments","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F6.ee-risk-assessments",{"title":1847,"path":1848,"stem":1849,"children":1850},"Admin","\u002Fsei-cert-cpp-coding-standard\u002Fadmin","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F1.index",[1851,1852],{"title":1847,"path":1848,"stem":1849},{"title":1853,"path":1854,"stem":1855},"TODO List","\u002Fsei-cert-cpp-coding-standard\u002Fadmin\u002Ftodo-list","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F2.todo-list",{"title":1857,"path":1858,"stem":1859},"Errata for SEI CERT C++ Coding Standard (2016 Edition)","\u002Fsei-cert-cpp-coding-standard\u002Ferrata-for-sei-cert-cpp-coding-standard-2016-edition","5.sei-cert-cpp-coding-standard\u002F6.errata-for-sei-cert-cpp-coding-standard-2016-edition",1775657784216]