JPCERT コーディネーションセンター

安全・安心なIT社会のための、国内・国際連携を支援する

お問い合わせ サイトマップ English

Home > ラーニング > セキュアコーディング > CERT セキュアコーディングスタンダード > 01. プリプロセッサ (PRE)

  1. HTTPS

01. プリプロセッサ (PRE)

最終更新: 2010-03-19

PRE04-C. 標準ヘッダファイル名を再利用しない

標準ヘッダと同じ名前のファイルが、インクルードされるソースファイルのサーチパスにある場合、動作は未定義である。

以下の表に標準ヘッダを列挙する。

<assert.h> <complex.h> <ctype.h> <errno.h> <fenv.h>
<float.h> <inttypes.h> <iso646.h> <limits.h> <locale.h>
<math.h> <setjmp.h> <signal.h> <stdarg.h> <stdbool.h>
<stddef.h> <stdint.h> <stdio.h> <stdlib.h> <string.h>
<tgmath.h> <time.h> <uchar.h> <wchar.h> <wctype.h>

標準ヘッダファイル名、システム固有のヘッダファイル名、その他のヘッダファイル名を再利用しないこと。

違反コード

以下のコード例では、プログラマは、標準ライブラリのローカル版を使おうとしているが違いを明確にしていない。

#include "stdio.h"  /* 混乱を招く。<stdio.h> とは異なる */

/* ... */
適合コード

以下の解決法ではローカルライブラリに一意の名前をつけることで問題に対処している(「PRE08-C. ヘッダファイル名が一意であることを保証する」にあるように)。こうすることで、使用しているライブラリがオリジナルのものではないことが明確になる。

/* ローカル版の stdio.h を使っている */ 
#include "mystdio.h"

/* ... */
リスク評価

他のヘッダファイル名と衝突するヘッダファイル名を使用すると、間違ったファイルがインクルードされてしまう恐れがある。

レコメンデーション 深刻度 可能性 修正コスト 優先度 レベル
PRE04-C P2 L3
自動検出

LDRA tool suite V 7.6.0 はこのレコメンデーションの違反を検出することができる。

参考情報
  • [ISO/IEC 9899:1999] Section 7.1.2, "Standard Headers"
翻訳元

PRE04-C. Do not reuse a standard header file name

Top へ