Ce este un Integer Overflow?

Integer overflow se referă la fenomenul care are loc în anumite tipuri de date computerizate în care semnele lor trec de la pozitiv la negativ sau invers, când ajung la sfârșitul intervalelor aplicabile. În intervalele de computer, tipurile de date întregi au intervale circulare, iar când ajung la un capăt al intervalului lor, se deplasează imediat la celălalt capăt al intervalului lor. Acest lucru se mai numește și overflow întreg.

Un număr întreg cu semn poate conține un interval de valori de la -231 la (231) – 1. Acest număr întreg nu poate avea o valoare de (-231) – 1; mai degrabă, următorul număr la care crește se află la celălalt capăt al intervalului său: (231 – 1). Schimbarea de la negativ la pozitiv la sfârșitul intervalului său este un exemplu de depășire a numărului întreg. În același mod, un număr întreg nu poate avea o valoare de 231; această valoare ar trece în schimb la celălalt capăt al intervalului său și ar deveni -231.

Acest depășire are consecințe semnificative în timpul programării. O matrice poate avea în ea doar atâția indici cât permite tipul întreg, iar indicii negativi nu contează. Dacă un programator încearcă să creeze o matrice mai mare decât permite tipul întreg, pot apărea erori semnificative de memorie, deoarece depășirea întregului ar duce la un index negativ. Acest lucru este deosebit de periculos în limbile care nu au limite explicite de verificare pentru matrice, cum ar fi C++.

Când are loc depășirea unui număr întreg, pot apărea tipuri de depășire înrudite, cum ar fi depășirea tamponului, depășirea heap-ului și depășirea tamponului de stivă. În toate aceste cazuri, depășirea întregului acționează pentru a copleși structurile de memorie cu mai multe date decât pot conține acele structuri. Aceste depășiri, în programele simple, nu fac adesea mult mai mult decât să provoace o eroare de citire sau scriere nevalidă. Cu toate acestea, manipularea acestei probleme de către hackeri poate genera erori de memorie care pot cauza probleme mai grave.

În majoritatea programelor simple, depășirea întregului nu este o problemă majoră. Limitele tipului întreg sunt suficient de mari încât problema de depășire să nu intre în joc decât dacă sunt gestionate o mulțime de date simultan. În unele cazuri, depășirea poate fi atenuată, ca în cazul contoarelor în creștere, prin utilizarea unui tip de date mai mare, cu un interval mai mare. Tipul de date mai mare ar putea, teoretic, să întâmpine în cele din urmă aceeași problemă de depășire, dar pe măsură ce intervalele de tipuri de date devin mai mari, șansele de a face acest lucru sunt mai mici. Intervalul fiecărui tip de date întreg este de cel puțin două ori dimensiunea celui mai mic următor, astfel încât există spațiu suficient pentru date suplimentare.