引用: C/C++ セキュアコーディング 第2版 by Robert C. Seacordら
NGcode.c
unsigned int i, sum;
if (sum + i > UINT_MAX) {
// too big
} else {
sum += i;
};
OKcode.c
unsigned int i, j, sum;
if (i > UINT_MAX - sum) {
// too big
} else {
sum += i;
}
NGcode.cの場合、(sum+i)がUINT_MAXを超える場合ラップアラウンドが発生し、too bigの条件は成立しない。
OKcode.cのように書かないといけない。