C and C++


MATH.DOMAIN.SQRT : 負の値の平方根の計算

要旨

負の値の平方根の計算を実行しようとしています。

プロパティ

クラス名 sqrt on Negative Value
日本語クラス名 負の値の平方根の計算
クラス分類 信頼性 (reliability)
ニーモニック MATH.DOMAIN.SQRT
カテゴリー
MisraC2023 MisraC2023:D.4.1 Run-time failures shall be minimized
  MisraC2023:D.4.11 The validity of values passed to library functions shall be checked
Misra2012 Misra2012:D.4.1 Run-time failures shall be minimized
  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="sqrt on Negative Value"

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

CodeSonar ships with library models that allow it to functions such as libm sqrt() that compute a square root. If one of these functions is called with a negative value in the input parameter 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 sqrt on Negative Value warnings.

#include <math.h>

double mysqrt(double d){
    return sqrt(d)      /* two 'sqrt on Negative Value' warnings reported here:
                         * - one with path starting in call_sqrtneg_one()
                         * - one with path starting in call_sqrtneg_ten()
                         */
           + sqrt(d+5); /* one 'sqrt on Negative Value' warning reported here,
                         * with path starting in call_sqrtneg_ten()
                         */
}

/* -1.0 is negative, -1.0 + 5 is not */
double call_sqrtneg_one(void){ return mysqrt(-1.0); }

/* -10.0 is negative, -10.0 + 5 is also negative */
double call_sqrtneg_ten(void){ return mysqrt(-10.0); }

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

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