このリリースには以下の拡張が含まれます。

リリース日: 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 Extension for Visual Studio Code の拡張

C/C++test Extension for Visual Studio Code の機能が拡張されました。Azure DevOps リポジトリから解析結果をインポートできるようになりました。C/C++test extension for Visual Studio Code の詳細については Visual Studio Code Marketplace を参照してください。

コード カバレッジ ワークフローの合理化

C/C++test でカバレッジ情報を収集する際に起こる問題をトラブルシューティングするのに役立つ新しいオプションが追加されました。以下が可能です。

  • エラーや警告の情報など、カバレッジ ワークスペースの診断情報を表示する。
  • カバレッジ ワークスペースの診断データを収集し、Parasoft サポートに送信する。
  • インストゥルメントとレポート生成の間に場所が変わったファイルのカバレッジ情報を収集できるようにファイル パスをマッピングする。
  • インストゥルメントまたはコンパイルの問題から自動的に復旧する。
  • 1 回のビルドで複数回コンパイルされるファイルのカバレッジを収集する。

詳細は「コード カバレッジのトラブルシューティング」を参照してください。

サポート対象コンパイラ

新たに以下のコンパイラがサポートされました。

コンパイラ名コンパイラ略称
ARM Compiler 6.16armclang_6_16
Clang C/C++ Compiler v 12.0 (x86_64)clang_12_0
GNU GCC 11.x (x86_64)gcc_11-64
IAR Compiler for ARM v. 9.10xiccarm_9_10

以下のコンパイラのサポート レベルが変更されました。

  • TI ARM C/C++ Compiler v20.2 が完全にサポートされるようになりました。
  • FR Family Softune C/C++ Compiler V6 – サポート レベルが Extended から Standard に変更されました。
  • RX C/C++ Compiler 2.5x – サポート レベルが Extended から Standard に変更されました。

詳細は「サポート対象コンパイラ」を参照してください。

IDE のサポート

Eclipse バージョン 2020-06 (4.16) - 2021-06 (4.20) のサポートが追加されました。

追加または更新された解析ルール

新規静的解析ルールが追加され、コンプライアンス標準のカバー範囲が拡張されました。追加および更新されたルールの一覧は「New Rules」、「Updated Rules」を参照してください。

追加または更新されたテスト コンフィギュレーション

以下のテスト コンフィギュレーションが追加されました。

  • 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/ にあります。

EULA に同意するには、cpptestcli.properties 設定ファイルで次の設定を有効にします。parasoft.eula.accepted=true

IDE に Parasoft Plugin をインストールする場合、インストール ウィザードによって EULA への同意が求められ、cpptestcli.properties ファイルに自動的に EULA への同意設定が追加されます。

Parasoft Plugin for Visual Studio をサイレント (非インタラクティブ) モードでインストールする場合、次のコマンドを使用して EULA への同意のうえインストーラーを実行する必要があります。/acceptEula=yes

非推奨の環境およびサポート対象から削除された環境

Visual Studio 2012 および 2013 のサポートが非推奨になり、次のリリースで削除される予定です。

サポート対象から削除された IDE

次の IDE のサポートは廃止されました。

  • Eclipse 4.3

解決済みのバグおよび 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 の誤検出

XT-39166 Git でローカルに変更された行のチェックの問題 
XT-39322 軽量 Parasoft Plugin でライセンスを要求したときにプロキシ設定が適用されない
XT-39329 SAST フォーマットのレポートが Eclipse UI で開かれない 



新規ルール

ルール 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

Modern 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

  • No labels