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

外部参考資料