Cでセキュアに書こう

ふらふらウェブを見てたら、Cでセキュアに書くコツをまとめたサイトを見つけたので紹介します。
CERT C コーディングスタンダード
00.はじめにから引用してみる。

C言語C++言語用のCERT セキュアコーディングスタンダードの目的は、それぞれのプログラミング言語で開発されたソフトウェアシステムのセキュリティを確保するために必要な(ただし十分ではない)一連のルールを定めることである。

http://www.jpcert.or.jp/sc-rules/00.introduction.html

各項目を読めば読むほど、なるほどぉと感心するばかり。
趣味でプログラムやってる私からすると、すごいなぁと思うのみ。
深いです。

'??'は避ける

なんて知らなかったよ。あぶねー。

違反コード
このコード例は3文字表記 ??! を含む。これは | に置き換えられる。

size_t i = /* 初期値 */;
if (i > 9000) {
  if (puts("Over 9000!??!") == EOF) {
     /* エラー処理 */
   }
}

C99 に適合したコンパイラを使うと、このコードの出力は Over 9000!| になる。
適合コード
以下のコード例は文字列連結を用いて二つの "?" を連結している。このようにしなければ、3文字表記の始まりと解釈されてしまう。

size_t i = /* 初期値 */;
/* i への代入 */
if (i > 9000) {
   if (puts("Over 9000!?""?!") == EOF) {
     /* エラー処理 */
   }
}

上記のコードは意図したとおり Over 9000!??! を出力する。

PRE07-C. "??" の繰り返しは避ける

わたしはこれ本当に知らなかった。
本当にまずいよ。
そんなのばっかり。

これ読んだら

Cで気楽にプログラム書けなくなっちゃうなぁ。
マネージドな言語でプログラムするのが、これからの時代は、セキュリティの観点から言って必須なんだなぁとか思いました。