メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ISO/IEC TS 17961 [chrsgnext]

符号なし char として表現できない文字処理関数に引数を渡す

説明

ルール定義

符号なし char として表現できない文字処理関数に引数を渡す。1

Polyspace 実装

このチェッカーは、標準ライブラリ整数ルーチンの無効な使用をチェックします。

すべて展開する

問題

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

  • 文字変換

    toupper, tolower

  • 文字チェック

    isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit

  • 整数除算

    div, ldiv

  • 絶対値

    abs, labs

修正方法

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

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

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

例 - 大きい負数の絶対値
#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);
}

チェック情報

決定可能性:決定不可能

バージョン履歴

R2019a で導入


1 Extracts from the standard "ISO/IEC TS 17961 Technical Specification - 2013-11-15" are reproduced with the agreement of AFNOR. Only the original and complete text of the standard, as published by AFNOR Editions - accessible via the website www.boutique.afnor.org - has normative value.