CERT.MSC.NORETURN_FUNC_RETURNS

[[noreturn]] と宣言された関数から返さない

脆弱性とリスク

[[noreturn]] とマークされた関数から返すと、未定義の動作が発生し、データ整合性違反を引き起こすために悪用される可能性があります。

軽減と防止

[[noreturn]] と宣言された関数から返さない

コピー
  #include <cstdlib>
  
  [[noreturn]] void f1(int i) {
      if (i > 0)
          throw "Received positive input";
      else if (i < 0) {
         //std::exit(0);
          i++;
          }
 }
 
 [[noreturn]] void f2(int i) {
   if (i > 0)
     throw "Received positive input";
   std::exit(0);
 }