Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Översikt
Det går inte att söka efter spill av ett tillägg genom att jämföra med något av argumenten i tillägget om storleken på alla argumenttyper är mindre än 4 byte. Detta beror på att resultatet av tillägget höjs till en int på 4 byte.
Rekommendation
Kontrollera överflödet genom att jämföra additionen med ett värde som är minst 4 byte.
Exempel
I det här exemplet resulterar jämförelsen i ett heltalsöverflöd.
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;
}
Åtgärda felet genom att genomföra en kontroll av överflödet genom att jämföra tillägget mot ett värde som är åtminstone 4 byte:
unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
if (v + b > 0x00FFFF)
{
// ... do something
}
return v + b;
}
Ytterligare information
Den här frågan finns på Microsoft GitHub CodeQL-lagringsplatsen. Mer information om hur Windows Driver-utvecklare kan ladda ner och köra CodeQL finns på sidan CodeQL och testsidan för logotyper av statiska verktyg.