Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Přehled
Kontrola přetečení při sčítání pomocí porovnání s jedním z argumentů selže, pokud velikost všech typů argumentů je menší než 4 bajty. Důvodem je to, že výsledek přidání je povýšen na 4 bajtový int.
Doporučení
Zkontrolujte přetečení porovnáním výsledku sčítání s hodnotou, která má alespoň 4 bajty.
Příklad
V tomto příkladu výsledkem porovnání bude celé číslo přetečení:
unsigned short CheckForInt16OverflowBadCode(unsigned short v, unsigned short b)
{
if (v + b < v) // BUG: "v + b" will be promoted to 32 bits
{
// ... do something
}
return v + b;
}
Chcete-li chybu opravit, zkontrolujte přetečení porovnáním výsledku sčítání s hodnotou, která má alespoň 4 bajty.
unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
if (v + b > 0x00FFFF)
{
// ... do something
}
return v + b;
}
Další podrobnosti
Tento dotaz najdete v úložišti Microsoft GitHub CodeQL. Podrobnosti o tom, jak mohou vývojáři ovladačů systému Windows stáhnout a spustit CodeQL, najdete na stránce CodeQL and the Static Tools Logo Test.