ファイル アクセス モードまたはステータスが不適切です
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 で導入