Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Genel Bakış
Tüm bağımsız değişken türlerinin boyutu 4 bayttan daha küçükse, toplama işleminin taşma durumunu toplama bağımsız değişkenlerinden biriyle karşılaştırarak kontrol etme denemesi başarısız olur. Bunun nedeni, toplama işleminin sonucunun 4 baytlık bir int'e yükseltildiğidir.
Tavsiye
Toplamayı en az 4 bayt olan bir değerle karşılaştırarak taşma durumunu denetleyin.
Örnek
Bu örnekte, karşılaştırma sonucu tamsayı taşması ile sonuçlanacaktır.
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;
}
Hatayı düzeltmek için, toplamayı en az 4 bayt olan bir değerle karşılaştırarak taşma durumunu denetleyin:
unsigned short CheckForInt16OverflowCorrectCode(unsigned short v, unsigned short b)
{
if (v + b > 0x00FFFF)
{
// ... do something
}
return v + b;
}
Ek ayrıntılar
Bu sorgu Microsoft GitHub CodeQL deposunda bulunabilir. Windows Sürücüsü geliştiricilerinin CodeQL'i nasıl indirip çalıştırabileceği hakkında ayrıntılı bilgi için CodeQL ve Statik Araçlar Logo Testi sayfasına bakın.