このリリースには、以下の拡張が含まれます。
リリース日: 2021年11月15日
Azure DevOps および GitLab との統合
CI システムを使用するワークフローの合理化に役立つ拡張が行われました。C/C++test からレポートされた結果を直接 Azure Pipelines または GitLab で簡単に確認できます。
Azure DevOps との統合
C/C++test extension for Azure DevOps が追加され、C/C++test を簡単に Azure DevOps パイプラインに統合できるようになりました。C/C++test extension は、C/C++test の解析を実行し、 Azure DevOps 固有の SARIF フォーマットで C/C++test レポートを生成するタスクを提供します。パイプラインを実行するたびに、解析の結果がビルド結果に表示されます。詳細については https://marketplace.visualstudio.com/items?itemName=parasoft.cpptest-azure-devops を参照してください。
GitLab との統合
C/C++test の解析を実行して SAST フォーマットで解析レポートを生成するよう GitLab ワークフローを変更することで、GitLab と C/C++test を統合できるようになりました。C/C++test からレポートされた結果をコードの脆弱性として GitLab で参照できます。詳細については https://gitlab.com/parasoft/cpptest-gitlab を参照してください。
コード カバレッジ ワークフローの合理化
C/C++test でカバレッジ情報を収集する際に起こる問題をトラブルシューティングするのに役立つ新しいオプションが追加されました。以下が可能です。
- エラーや警告の情報など、カバレッジ ワークスペースの診断情報を表示する。
- カバレッジ ワークスペースの診断データを収集し、Parasoft サポートに送信する。
- インストゥルメントとレポート生成の間に場所が変わったファイルのカバレッジ情報を収集できるようにファイル パスをマッピングする。
- インストゥルメントまたはコンパイルの問題から自動的に復旧する。
- 1 回のビルドで複数回コンパイルされるファイルのカバレッジを収集する。
詳細は「コード カバレッジのトラブルシューティング」を参照してください。
追加または更新されたコード解析ルール
新規静的解析ルールが追加され、コンプライアンス標準のカバー範囲が拡張されました。追加および更新されたルールの一覧は「新規ルール」、「更新されたルール」を参照してください。
追加または更新されたテスト コンフィギュレーション
以下のテスト コンフィギュレーションが追加されました。
- OWASP Top 10 20211
1 このテストコンフィギュレーションはプレビュー版です。
Parasoft エンド ユーザーライセンス契約書への同意
C/C++test を利用するには、Parasoft エンド ユーザーライセンス契約書 (EULA) への同意が必要です。Parasoft EULA は C/C++test のインストール ディレクトリおよび https://www.techmatrix.co.jp/quality/support/parasoft/license/ にあります。C/C++test をインストールするとき、または初回起動時に EULA の条項への同意が求められます。
C/C++test のコマンド ライン インターフェイスを使用している場合、ローカル設定ファイルに次の設定を追加することで EULA に同意できます: parasoft.eula.accepted=true
Parasoft Plugin for Visual Studio をサイレント (非インタラクティブ) モードでインストールする場合、次のコマンドを使用して EULA への同意のうえインストーラーを実行する必要があります: /acceptEula=yes
非推奨の環境およびサポート対象から削除された環境
Visual Studio 2012 および 2013 のサポートが非推奨になり、次のリリースで削除される予定です。
解決済みのバグおよび FR
バグ/FR ID | 説明 |
---|---|
CPP-42644 | AUTOSAR A13-5-5 のマッピングの改善 |
CPP-47158 | コンストラクター初期化リストの明示的なコンストラクター呼び出しに対してプロパティ 'IsCompilerGenerated' が true を返す |
CPP-47452 | 属性モードが使用されている場合、列挙型が再構築されない |
CPP-47816 | error: no instance of overloaded function "getEnumInfo" matches the argument list |
CPP-47861 | アラインメントされた static 変数を持つインライン関数のインストゥルメントが正しくない |
CPP-47890 | AUTOSAR-A10_3_2-a: final 指定子に対して違反が誤検出される |
CPP-48213 | '*a' および 'a[b]' 式の型が const/volatile として検出されない |
CPP-48214 | 定数から文字列を生成した場合にクラッシュする |
CPP-48221 | METRICS-36: 同じ TU で宣言および定義された関数が使用されている場合、同じ呼び出しが 2 回カウントされる |
CPP-48252 | CODSTA-26 (AUTOSAR-A5_1_1-a): constexpr 変数の初期化子で使用されている定数に対して違反が誤検出される |
CPP-48260 | CERT-C INT15 のマッピングを改善する |
CPP-48263 | AUTOSAR-M0_1_4-a: static constexpr 変数に対して違反を誤検出する |
CPP-48264 | MISRA2004-20_3: 制限された入力ドメインを持つ関数にだけ違反をレポートするべき |
CPP-48265 | GLOBAL-UNUSEDFUNC: 関数がテンプレート パラメーターとして使用されている場合に違反を誤検出する |
CPP-48304 | Renesas rx2.5 コンパイラで関数マクロの呼び出しに対して違反が自動抑制されない場合がある |
CPP-48310 | 'float' 型の値として 'min' または 'min positive' が選択された場合、テスト ケース ウィザードが生成するテスト ケースが適切ではない |
CPP-48319 | JSF-143: 参照初期化に対して違反を誤検出する |
CPP-48320 | データ メンバー初期化子が許可されない |
CPP-48342 | データ ソースがあるテスト ケースで出力 Test Problem: Data source not found が表示される |
CPP-48386 | 'parasoft suppress' レコードの不正な形式の 'line' 属性によってより多くの違反が抑制される |
CPP-48390 | NAMING-44/JSF-051 にカスタマイズ可能な例外を追加する |
CPP-48395 | CODSTA-81 (AUTOSAR-M3_3_2-a): 明示的に特殊化されたテンプレートに対して違反を誤検出する |
CPP-48396 | 明示的なインスタンスを持つテンプレート関数に対して 'IsExplicitStatic' フラグが正しく動作しない |
CPP-48415 | error: array is too large (cannot allocate >=2^32 elements) |
CPP-48434 | PB-50: *scanf_s 関数の呼び出しに対して違反が誤検出される |
CPP-48464 | CODSTA-48 (AUTOSAR-A2_5_2-a): <:: token シーケンスが誤って 2 文字表記として検出される |
CPP-48491 | 識別子 "__builtin_arm_get_fpscr" が未定義 |
CPP-48500 | "volatile void *" 型の引数が "void *" 型のパラメーターと互換性がない |
CPP-48544 | operator_test スタブ作成時に STATUS_ACCESS_VIOLATION エラー |
CPP-48555 | パーサーに C モードでの enum base のサポートを追加する (clang 拡張) |
CPP-48582 | enum 型の引数を持つ関数で自動生成されたパラメータライズド テスト ケースのパラメーター名が一貫していない |
CPP-48588 | bcc32_6_9 コードに対して cwc 内部エラー: "pm_class_type: not a pointer to member type" |
CPP-48629 | PB-69: 匿名の共用体のメンバーが指定付き初期化子で初期化されている場合に python エラーが発生する |
CPP-48639 | static_cast 演算子のカバレッジ インストゥルメントが誤っている |
CPP-48670 | CERT-C DCL53 のマッピングを改善する |
CPP-48703 | CERT-C ERR56 のマッピングを改善する |
CPP-48713 | ccac コンパイラの -Hcppext= および -Hcext= オプションのサポートを追加する |
CPP-48714 | 括弧付き初期化子の再構築が誤っている |
CPP-48976 | 'Friend' ノードで 'Type' および 'TypeTraverseReference' プロパティが動作しない |
CPP-48977 | VXTC コンパイラの関数属性でパース エラー |
CPP-49003 | vxtc_6_3 の空の構造体でインストゥルメント エラー |
CPP-49029 | カバレッジ インストゥルメントがコンパイル エラーをレポートする: inlining failed in call to always_inline |
CPP-49037 | ccac コンパイラの -Hcppext= および -Hcext= オプションのサポートを修正する |
CPP-49042 | 'using' ノードの 'Fullname' プロパティがスコープ接頭辞をレポートしない |
CPP-49048 | INIT-06: テンプレート クラスで初期化子付きの const データ メンバーが定義されている場合にエラーを誤検出する |
CPP-49145 | http プロキシの設定の改善 |
CPP-49162 | Using 宣言で使用されている実際の名前空間をチェックできるプロパティを追加する |
CPP-49199 | cpptestcc カバレッジ インストゥルメントが UTF-8 のリテラルを通常の string リテラルに変更することで動作が変わる |
CPP-49212 | CODSTA-MCPP-11_b_cpp11 (AUTOSAR-A7_1_2-b) および CODSTA-MCPP-09 (AUTOSAR-A15_4_4-a): が 'main' 関数に対して違反を誤検出する |
CPP-49657 | __far IAR メモリ属性が指定された配列がパーサーをクラッシュさせる |
FA-8388 | CERT_C-POS39-a (BD-PB-BYTEORD) がデータの送受信に違反をレポートする |
FA-8430 | BD-PB-OVERFNZT が違反を検出できない |
FA-8477 | 要素の使用が解放された変数の再代入でもある場合、BD-RES-FREE が違反を検出できない |
FA-8541 | BD-PB-OVERFNZT の誤検出 |
FA-8548 | BD-PB-OVERFNZT が strdupa および strverscmp の違反を検出できないい |
FA-8551 | BD-PB-NP が違反を検出できない |
FA-8557 | BD-PB-VALPARAM の誤検出 |
FA-8573 | BD-PB-UCMETH の誤検出 |
FA-8597 | 別のエイリアス (ルール マッピング) を使用した後続の実行で同じルールが使用されている場合、インクリメント解析が違反のレポートを中止する |
FA-8634 | BD-SECURITY-LOG の誤検出 |
FA-8650 | 連結されたキャストを簡略化しようとした後、CFG が正しくない |
PT-914 | C/C++test Pro VS プラグインが DTP からライセンスを取得できない - HTTPS handshake_failure |
PT-927 | ライセンスを要求したときにプロキシ設定が適用されない |
PT-992 | テクニカル サポート アーカイブにプレーン テキストの認証情報 |
新規ルール
ルール ID | ヘッダー |
---|---|
AUTOSAR-A13_5_5-b | 比較演算子は同じパラメーター型と noexcept を持つ非メンバー関数でなければならない |
CERT_CPP-DCL53-c | 文法的に曖昧な関数宣言を避ける |
CERT_CPP-ERR56-b | catch ブロックを空のままにしない |
CODSTA-CPP-107 | 比較演算子は非メンバー関数でなければならない |
CODSTA-CPP-107_b | 比較演算子は同じパラメーター型と noexcept を持つ非メンバー関数でなければならない |
FORMAT-48 | 関数宣言中のパラメーター名は括弧で囲むべきではない |
FORMAT-49 | 変数宣言中のローカル変数名は括弧で囲むべきではない |
OWASP2021-A1-a | ファイル名インジェクションから防御する |
OWASP2021-A1-b | 権限を正しい順序で破棄する |
OWASP2021-A1-c | 権限が正常に破棄されたことを確認する |
OWASP2021-A2-a | 疑似乱数生成器に適切なシードを指定する |
OWASP2021-A3-a | 未検証のバイナリ データをログ メソッドに渡すのを避ける |
OWASP2021-A3-b | コマンド インジェクションから防御する |
OWASP2021-A3-c | 汚染されたデータを出力コンソールに出力してはならない |
OWASP2021-A3-d | 環境インジェクションから防御する |
OWASP2021-A3-e | フォーマット文字列からサニタイズされていないユーザー入力を除外する |
OWASP2021-A3-f | SQL インジェクションから防御する |
OWASP2021-A4-a | ログ ファイルに書き込む関数に機密データを渡さない |
OWASP2021-A5-a | 1 つの try-catch 文または関数監視ブロックに派生クラスおよびそのすべてまたは一部の基底クラスのハンドラがある場合、最後に派生されたクラスから基底クラスへの順でハンドラを記述する |
OWASP2021-A5-b | catch ブロックを空のままにしない |
OWASP2021-A5-c | errno 値を適切に使用する |
OWASP2021-A5-d | libxerces-c で XML 外部エンティティの解決 (XXE) を無効化する |
OWASP2021-A7-a | 弱い暗号化関数を使用してはならない |
OWASP2021-A8-a | LoadLibrary() が正しいライブラリをロードするよう注意する |
OWASP2021-A9-a | すべての例外は、再スローされるか標準ロガーでログに記録されるべきである |
PB-78 | プログラマー定義の整数型での書式付き IO には intmax_t または uintmax_t を使用する |
PB-79 | 文法的に曖昧な関数宣言を避ける |
更新されたルール
カテゴリ ID | ルール ID |
---|---|
AUTOSAR C++14 Coding Guidelines | AUTOSAR-A0_1_1-a, AUTOSAR-A10_3_2-a, AUTOSAR-A12_1_1-b, AUTOSAR-A12_1_3-a, AUTOSAR-A13_5_5-a, AUTOSAR-A15_4_4-a, AUTOSAR-A20_8_2-a, AUTOSAR-A20_8_3-a, AUTOSAR-A20_8_4-a, AUTOSAR-A27_0_2-a, AUTOSAR-A2_5_2-a, AUTOSAR-A3_8_1-a, AUTOSAR-A5_1_1-a, AUTOSAR-A5_3_2-a, AUTOSAR-A7_1_2-b, AUTOSAR-M0_1_10-a, AUTOSAR-M0_1_4-a, AUTOSAR-M0_3_1-f, AUTOSAR-M0_3_1-g, AUTOSAR-M3_3_2-a |
フロー解析 | BD-PB-BYTEORD, BD-PB-NP, BD-PB-OVERFNZT, BD-PB-UCMETH, BD-PB-VALPARAM, BD-PB-VOVR, BD-RES-FREE, BD-SECURITY-LOG |
SEI CERT C | CERT_C-ARR38-d, CERT_C-CON31-b, CERT_C-DCL10-a, CERT_C-DCL11-a, CERT_C-DCL11-b, CERT_C-DCL11-c, CERT_C-DCL11-d, CERT_C-DCL11-e, CERT_C-DCL11-f, CERT_C-DCL22-a, CERT_C-ERR33-c, CERT_C-EXP34-a, CERT_C-FIO46-a, CERT_C-FIO47-a, CERT_C-FIO47-b, CERT_C-FIO47-c, CERT_C-FIO47-d, CERT_C-FIO47-e, CERT_C-FIO47-f, CERT_C-INT15-a, CERT_C-MEM00-d, CERT_C-MEM01-a, CERT_C-MEM04-a, CERT_C-MEM07-a, CERT_C-MEM30-a, CERT_C-MSC19-b, CERT_C-POS30-a, CERT_C-POS39-a, CERT_C-POS54-c, CERT_C-STR03-a, CERT_C-STR32-a |
SEI CERT C++ | CERT_CPP-DCL53-a, CERT_CPP-DCL53-b, CERT_CPP-ERR56-a, CERT_CPP-EXP54-a, CERT_CPP-MEM50-a, CERT_CPP-STR50-b, CERT_CPP-STR51-a |
コーディング規約 | CODSTA-26, CODSTA-48, CODSTA-81 |
モダン C++ コーディング規約 | CODSTA-MCPP-05, CODSTA-MCPP-09, CODSTA-MCPP-11_b_cpp11, CODSTA-MCPP-29, CODSTA-MCPP-30 |
Common Weakness Enumeration | CWE-20-c, CWE-415-a, CWE-416-a, CWE-476-a |
グローバル静的解析 | GLOBAL-ONEUSEVAR, GLOBAL-UNUSEDFUNC |
High Integrity C++ | HICPP-10_2_1-a, HICPP-12_4_2-a, HICPP-1_2_1-h, HICPP-2_2_1-a, HICPP-5_1_1-a, HICPP-5_2_1-c, HICPP-8_4_1-b |
初期化 | INIT-06, INIT-17 |
Joint Strike Fighter | JSF-012, JSF-051, JSF-071_b, JSF-138_b, JSF-143, JSF-151 |
メトリクス | METRICS-36 |
MISRA C 2004 | MISRA2004-20_3, MISRA2004-8_11 |
MISRA C++ 2008 | MISRA2008-0_1_10_b, MISRA2008-0_1_4, MISRA2008-0_1_6, MISRA2008-0_3_1_b, MISRA2008-0_3_1_e, MISRA2008-2_5_1, MISRA2008-3_3_2 |
MISRA C 2012 (Legacy) | MISRA2012-DIR-4_13_b, MISRA2012-DIR-4_1_b, MISRA2012-DIR-4_1_e, MISRA2012-RULE-1_3_c, MISRA2012-RULE-21_17_a, MISRA2012-RULE-22_2_a, MISRA2012-RULE-22_6, MISRA2012-RULE-2_2_b, MISRA2012-RULE-8_8, MISRA2012-RULE-9_4 |
MISRA C 2012 | MISRAC2012-DIR_4_1-b, MISRAC2012-DIR_4_1-e, MISRAC2012-DIR_4_13-b, MISRAC2012-RULE_1_3-c, MISRAC2012-RULE_21_17-a, MISRAC2012-RULE_22_2-a, MISRAC2012-RULE_22_6-a, MISRAC2012-RULE_2_2-b, MISRAC2012-RULE_8_8-a , MISRAC2012-RULE_9_4-a |
名前付け規則 | NAMING-44 |
最適化 | OPT-26 |
OWASP Top 10 Most Critical Web Application Security Risks (2017) | OWASP2017-A1-a, OWASP2019-API3-e |
バグの可能性 | PB-45, PB-46, PB-47, PB-48, PB-49, PB-50, PB-62, PB-69 |