CERT.FILE_PTR.DEREF.RETURN
(関数によって返される) FILE オブジェクトへのポインターは逆参照してはなりません。
脆弱性とリスク
関数によって返される FILE オブジェクトへのポインターを逆参照すると、予期しない動作が発生する可能性があります。
軽減と防止
関数によって返される FILE オブジェクトへのポインターを逆参照しないでください。
脆弱コード例
コピー
#include <cstring>
typedef struct __sFILE {
int pos;
} FILE;
FILE *getFile() {
FILE *p;
return p;
}
static int i = 1;
int *getInt() {
return &i;
}
void func9_function_return ( void )
{
int x = getFile()->pos;
FILE file1 = *getFile();
char chr = *((char*)getFile());
}
この非準拠の例では、Klocwork は 19、20、21 行目で CERT.FILE_PTR.DEREF.RETURN の欠陥を報告します。これは、関数によって返される FILE オブジェクトへのポインターを逆参照しており、予期しない動作が発生する可能性があるためです。
修正コード例
コピー
#include <cstring>
typedef struct __sFILE {
int pos;
} FILE;
FILE *getFile() {
FILE *p;
return p;
}
static int i = 1;
int *getInt() {
return &i;
}
void func9_function_return ( void )
{
FILE file2 = *((FILE*)getInt());
}
上記の例は、関数によって返される FILE オブジェクトへのポインターをどのコードも逆参照していないため、準拠した例となっています。
関連チェッカー
- MISRA.FILE_PTR.DEREF.RETURN.2012