有一次我在 review 同事的 code,看到一行:
if (len - sizeof(header) > 0) {
我當下沒說什麼,因為看起來很正常。結果那週 QA 回報說某個封包長度剛好等於 header size 的時候,系統會亂跑。
追進去才發現:len 是 int,sizeof(header) 是 size_t,也就是 unsigned。當 len == sizeof(header) 的時候,相減結果是 0,但如果 len < sizeof(header),你以為是負數,其實是一個很大的正整數。然後 > 0 就是 true。
然後就囧了。