無効IDを「-1」にする恐怖

いま自前のライブラリを整理・改造しているんだが、大きなバグを見つけてしまい青ざめてしまった。幸いにもその関数は使われていなかったので被害はない。

ベースとした処理が古かったため、無効 IDとして「-1」を使っていたんだが(今は「-1」は使わない)、その時の実装では問題なくても、ライブラリの改造を重ねる中で無効IDのチェックがなくなってしまい、バッファアンダーフローしてた。

元々あちこちに仕掛けてある assert も不幸なことに記述ミスで効いてなかった。。「assert(id < MAX);」だと「-1」は通るじゃんか。これだから「-1」は怖い。

今回ライブラリを改造する中でこの問題は修正して、「-1」は使わない様に。assert は「assert(uint(id) < uint(MAX));」と書き直し。←これだけで「-1」を弾けるのはちょっとしたTipsかも?