C and C++


LANG.STRUCT.PPE : オブジェクトより後のポインタ

要旨

ポインタ変数がオブジェクトの終了アドレスより後を指しています。

そのようなポインタは、(バッファアンダーラン もしくは 型アンダーラン ワーニングが検出される箇所で)参照されていなければ必ずしも問題にはなりませんが、疑わしい可能性はあります。

設定ファイルパラメータ WARN_POINTER_AT_END により、ユーザーはオブジェクト終了位置を指すポインタが、このワーニングを引き起こすか否かをを設定可能です。

プロパティ

クラス名 Pointer Past End of Object
日本語クラス名 オブジェクトより後のポインタ
クラス分類 スタイル (style)
ニーモニック LANG.STRUCT.PPE
カテゴリー
MisraC2023 MisraC2023:1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  MisraC2023:18.1 A pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operand
  MisraC2023:18.2 Subtraction between pointers shall only be applied to pointers that address elements of the same array
Misra2012 Misra2012:1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  Misra2012:18.1 A pointer resulting from arithmetic on a pointer operand shall address an element of the same array as that pointer operand
  Misra2012:18.2 Subtraction between pointers shall only be applied to pointers that address elements of the same array
Misra2004 Misra2004:17.1 Pointer arithmetic shall only be applied to pointers that address an array or array element
  Misra2004:17.2 Pointer subtraction shall only be applied to pointers that address elements of the same array
AUTOSARC++14 AUTOSARC++14:M5-0-16 A pointer operand and any pointer resulting from pointer arithmetic using that operand shall both address elements of the same array.
MisraC++2008 MisraC++2008:5-0-16 A pointer operand and any pointer resulting from pointer arithmetic using that operand shall both address elements of the same array.
MisraC++2023 MisraC++2023:4.1.3 There shall be no occurrence of undefined or critical unspecified behaviour
  MisraC++2023:8.7.1 Pointer arithmetic shall not form an invalid pointer
CWE CWE:465 Pointer Issues
  CWE:823 Use of Out-of-range Pointer Offset
TS17961 TS17961:5.21-invptr 5.21. Forming or using out-of-bounds pointers or array subscripts
CERT-C CERT-C:ARR30-C Do not form or use out-of-bounds pointers or array subscripts
  CERT-C:ARR37-C Do not add or subtract an integer to a pointer to a non-array object
  CERT-C:ARR39-C Do not add or subtract a scaled integer to a pointer
  CERT-C:EXP08-C Ensure pointer arithmetic is used correctly
  CERT-C:MEM35-C Allocate sufficient memory for an object
CERT-CPP CERT-CPP:CTR50-CPP Guarantee that container indices and iterators are within the valid range
JSF++ JSF++:211 Algorithms shall not assume that shorts, ints, longs, floats, doubles or long doubles begin at particular addresses.
OWASP-2017 OWASP-2017:A8 Insecure deserialization
OWASP-2021 OWASP-2021:A8 Software and data integrity failures
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Pointer Past End of Object"

void lang_struct_ppe(void){
    int A[10];

    int *q = &A[11]; /* 'Pointer Past End of Object' warning issued here */     
        
    int *p = &A[10]; /* 'Pointer Past End of Object' warning issued here
                      * only if WARN_POINTER_AT_END=Yes
                      */
}

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

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