メインコンテンツ

標準ライブラリ整数ルーチンの無効な使用

標準ライブラリ関数の間違った引数

説明

この欠陥は、標準ライブラリの整数関数で無効な引数が使用された場合に発生します。この欠陥では以下が検出されます。

  • 文字変換関数 (toupper()tolower() など)

  • 文字チェック関数 (isalnum()isalpha()iscntrl()isdigit など)

  • 整数除算関数 (div()ldiv() など)

  • 絶対値関数 (abs()labs() など)

修正方法

修正方法は欠陥の根本原因によって異なります。多くの場合、結果の詳細 (または Polyspace as You Code のソース コード ツールヒント) には欠陥につながる一連のイベントが表示されます。そのシーケンス内のどのイベントについても修正を実装できます。結果の詳細にイベント履歴が表示されない場合は、ソース コード内で右クリック オプションを使用して、欠陥に関連する変数のこれまでの参照を検索し、関連するイベントを検出できます。Polyspace デスクトップ ユーザー インターフェイスでの Bug Finder の結果の解釈またはPolyspace Access Web インターフェイスでの Bug Finder の結果の解釈 (Polyspace Access)も参照してください。

以下の修正例を参照してください。

問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。

チェッカーの拡張

カスタム ライブラリからの特定の値と関数の無効な使用を原因とする欠陥をチェックするには、このチェッカーを拡張してください。次に例を示します。

すべて展開する

#include <limits.h>
#include <stdlib.h>

int absoluteValue(void) {

    int neg = INT_MIN;
    return abs(neg);
}

abs への入力値は INT_MIN です。INT_MIN の絶対値は INT_MAX+1 です。この数値は int 型では表現できません。

修正 — 入力引数を変更

1 つの修正方法として、入力値を戻り値のデータ型に適合するよう変更することができます。この例では、入力値を INT_MIN+1 に変更します。

#include <limits.h>
#include <stdlib.h>

int absoluteValue(void) {

    int neg = INT_MIN+1;
    return abs(neg);
}

結果情報

グループ: 数値
言語: C | C++
既定値: オン
コマンド ライン構文: INT_STD_LIB
影響度: High

バージョン履歴

R2013b で導入