Vad är ett heltalsöverflöde?

Heltalsspill hänvisar till det fenomen som inträffar i vissa datordatatyper där deras tecken växlar från positivt till negativt, eller vice versa, när de når ändarna av sina tillämpliga intervall. I datorintervall har heltalsdatatyper cirkulära intervall, och när de når ena änden av sitt intervall, flyttar de omedelbart till den andra änden av sitt intervall. Detta kallas också heltalsspill.

Ett heltal med tecken kan innehålla ett värdeintervall från -231 till (231) – 1. Detta heltal kan inte ha ett värde på (-231) – 1; snarare är nästa nummer som den ökar till i andra änden av sitt intervall: (231 – 1). Förändringen från negativ till positiv i slutet av dess intervall är ett exempel på heltalsspill. På samma sätt kan ett heltal inte ha värdet 231; detta värde skulle istället byta till den andra änden av sitt intervall och bli -231.

Detta spill har betydande konsekvenser under programmeringen. En matris kan bara ha så många index i sig som heltalstypen tillåter, och negativa index räknas inte. Om en programmerare försöker skapa en array som är större än heltalstypen tillåter, kan betydande minnesfel uppstå eftersom heltalsspill skulle resultera i ett negativt index. Detta är särskilt farligt i språk som inte har explicita gränser som söker efter arrayer, som C++.

När heltalsspill inträffar kan relaterade typer av spill som buffertspill, heapspill och stackbuffertspill inträffa. I alla dessa fall verkar heltalsspillet för att överväldiga minnesstrukturer med mer data än de strukturerna kan tänkas hålla. Dessa överflöden, i enkla program, gör ofta inte mycket mer än att orsaka ett ogiltigt läs- eller ogiltigt skrivfel. Manipulering av detta problem av hackare kan dock skapa minnesfel som kan orsaka allvarligare problem.

I de flesta enkla program är heltalsspill inte något större problem. Gränserna för heltalstypen är tillräckligt stora för att överflödesproblemet inte kommer in i bilden om inte mycket data hanteras på en gång. I vissa fall kan spill minskas, som i fallet med inkrementerande räknare, genom att använda en större datatyp med ett större räckvidd. Den större datatypen skulle i teorin så småningom kunna stöta på samma överflödesproblem, men när datatypintervallen blir större blir chanserna att göra det mindre. Varje heltalsdatatyps intervall är minst dubbelt så stort som den näst minsta, så det finns gott om utrymme för ytterligare data.