C and C++


MATH.DOMAIN.POW : Undefined Power of Zero

要旨

累乗関数の底を指定する引数に0を入力し、かつ、指数を指定する引数を値を0もしくは負値とした状態で、累乗関数pow()が呼び出されました。

プロパティ

クラス名 Undefined Power of Zero
日本語クラス名 Undefined Power of Zero
クラス分類 信頼性 (reliability)
ニーモニック MATH.DOMAIN.POW
カテゴリー
MisraC2023 MisraC2023:D.4.11 The validity of values passed to library functions shall be checked
Misra2012 Misra2012:D.4.11 The validity of values passed to library functions shall be checked
Misra2004 Misra2004:20.3 The validity of values passed to library functions shall be checked
AUTOSARC++14 AUTOSARC++14:A0-4-4 Range, domain and pole errors shall be checked when using math functions.
CWE CWE:628 Function Call with Incorrectly Specified Arguments
  CWE:687 Function Call With Incorrectly Specified Argument Value
  CWE:688 Function Call With Incorrect Variable or Reference as Argument
CERT-C CERT-C:FLP32-C Prevent or detect domain and range errors in math functions
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで有効になっています。チェックを無効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += discard class="Undefined Power of Zero"

ワーニングを引き起こす関数

CodeSonar ships with library models that allow it to functions such as libm pow() that compute a power. If one of these functions is called with zero in the "base" parameter position and zero or a negative value in the "power" parameter position, a warning will be issued.

If you have created a custom library model for some function f() in terms of one of these existing models, calls to f() will also be capable of triggering Undefined Power of Zero warnings.

#include <math.h>

double call_pow(double base, double exp){
    double a = pow(1,1);                           /* ok: base and exponent both > 0 */
    double b = pow(0,5);                           /* ok: exponent > 0 */
    double c = pow(0,-1);      /* 'Undefined Power of Zero' warning issued here */
    double d = pow(base,-1);            /* EVIDENCED ONLY: 'Undefined Power of Zero' warning issued here
                                         * if CodeSonar has evidence that call_pow() is called with a value ==0 as the first argument. */
    double e = pow(0,exp);     /* 'Undefined Power of Zero' warning issued here */
    double f = pow(base,exp);           /* EVIDENCED ONLY: 'Undefined Power of Zero' warning issued here
                                         * if CodeSonar has evidence that call_pow() is called with a value ==0 as the first argument. */

    return a+b+c+d+e+f;
}

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

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