ファイル アクセス モードまたはステータスが不適切です
fopen または open グループの関数のアクセス モード引数が無効
説明
この欠陥は、fopen または open グループ内の関数を、無効なまたは互換性のないファイル アクセス モードで、ファイル作成フラグを引数として、またはファイル ステータス フラグを引数として使用した場合に発生します。たとえば、関数 open の場合、有効な例は次のとおりです。
有効なアクセス モードには、
O_RDONLY、O_WRONLYおよびO_RDWRが含まれる。有効なファイル作成フラグには、
O_CREAT、O_EXCL、O_NOCTTYおよびO_TRUNCが含まれる。有効なファイル ステータス フラグには、
O_APPEND、O_ASYNC、O_CLOEXEC、O_DIRECT、O_DIRECTORY、O_LARGEFILE、O_NOATIME、O_NOFOLLOW、O_NONBLOCK、O_NDELAY、O_SHLOCK、O_EXLOCK、O_FSYNC、O_SYNCなどが含まれる。
欠陥は次のような状態で発生します。
| 状態 | リスク | 修正方法 |
|---|---|---|
関数 ANSI® C 標準によると、
|
実装によっては、アクセス モードの次のような拡張が許可されている。
ただし、アクセス モードの文字列は、有効なシーケンスのいずれかで始まらなければならない。 | fopen に有効なアクセス モードを渡す。 |
ステータス フラグ O_APPEND が、O_WRONLY または O_RDWR のいずれかと組み合わされずに関数 open に渡される。 |
関数 | O_APPEND|O_WRONLY または O_APPEND|O_RDWR をアクセス モードとして渡す。 |
ステータス フラグ O_APPEND および O_TRUNC がともに関数 open に渡される。 |
関数 | 意図することに応じて、2 つのモードのいずれかを渡す。 |
ステータス フラグ O_ASYNC が関数 open に渡される。 | 特定の実装では、モード O_ASYNC によって信号駆動の I/O 操作が有効にされない。 | 代わりに、fcntl(pathname, F_SETFL, O_ASYNC); を使用する。 |
修正方法
修正方法は、関数および使用されるフラグによって異なります。上の表に記載されている修正と以下の修正付きのコード例を参照してください。
問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
例
結果情報
| グループ: プログラミング |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: BAD_FILE_ACCESS_MODE_STATUS |
| 影響度: Medium |
バージョン履歴
R2015b で導入