C and C++


LANG.FUNCS.APM : 配列パラメータのミスマッチ

要旨

関数のパラメータがサイズSで指定された配列型で宣言されているが、関数の引数がサイズSよりも小さい要素数の配列でコールされています。

プロパティ

クラス名 Array Parameter Mismatch
日本語クラス名 配列パラメータのミスマッチ
クラス分類 信頼性 (reliability)
ニーモニック LANG.FUNCS.APM
カテゴリー
MisraC2023 MisraC2023:17.5 The function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elements
Misra2012 Misra2012:17.5 The function argument corresponding to a parameter declared to have an array type shall have an appropriate number of elements
AUTOSARC++14 AUTOSARC++14:A18-1-1 C-style arrays shall not be used.
CWE CWE:686 Function Call With Incorrect Argument Type
  CWE:687 Function Call With Incorrectly Specified Argument Value
  CWE:688 Function Call With Incorrect Variable or Reference as Argument
TS17961 TS17961:5.6-argcomp 5.6. Calling functions with incorrect arguments
CERT-C CERT-C:EXP37-C Call functions with the correct number and type of arguments
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっており、プロジェクトには非正規の C向けAST が必要になります。有効にするにはプロジェクト設定ファイル (configuration file) に以下の WARNING_FILTER ルールと RETAIN_UNNORMALIZED_C_AST 設定を追加してください。
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Array Parameter Mismatch"
注:非正規化された AST を継続して使用した場合、使用ディスク容量が増加し解析時間が長くなる可能性があります。

#include <stdlib.h>

void fnarr4 ( int a4[ 4 ] );
void fnarr2 ( int a2[ 2 ] );
void fnarr ( int a[ ] );

void apm( void )
{
    int arr3[ 3 ] = { 1, 2, 3 };
    int arr4[ 4 ] = { 0, 1, 2, 3 };

    fnarr4(arr3);  /* 'Array Parameter Mismatch' warning issued here */
    fnarr2(arr3);           /* length of arr3 ≥ 2  */
    fnarr(arr3);            /* fnarr() declaration does not specify size for array parameter */
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。