Apa itu Integer Overflow?

Integer overflow mengacu pada fenomena yang terjadi pada tipe data komputer tertentu di mana tanda-tandanya beralih dari positif ke negatif, atau sebaliknya, ketika mereka mencapai ujung rentang yang berlaku. Dalam rentang komputer, tipe data integer memiliki rentang melingkar, dan ketika mereka mencapai salah satu ujung jangkauannya, mereka segera pindah ke ujung jangkauan lainnya. Ini juga disebut integer overflow.

Bilangan bulat bertanda dapat memiliki rentang nilai dari -231 hingga (231) – 1. Bilangan bulat ini tidak boleh memiliki nilai (-231) – 1; melainkan, angka berikutnya yang bertambah adalah di ujung lain dari jangkauannya: (231 – 1). Perubahan dari negatif ke positif pada akhir jangkauannya adalah contoh dari integer overflow. Dengan cara yang sama, bilangan bulat tidak dapat memiliki nilai 231; nilai ini malah akan beralih ke ujung lain dari jangkauannya dan menjadi -231.

Luapan ini memiliki konsekuensi yang signifikan saat pemrograman. Array hanya dapat memiliki indeks sebanyak yang diizinkan oleh tipe integer, dan indeks negatif tidak dihitung. Jika seorang programmer mencoba untuk membuat array yang lebih besar dari tipe integer memungkinkan, kesalahan memori yang signifikan dapat terjadi karena integer overflow akan menghasilkan indeks negatif. Ini sangat berbahaya dalam bahasa yang tidak memiliki batasan eksplisit yang memeriksa array, seperti C++.

Ketika integer overflow terjadi, jenis overflow terkait seperti buffer overflow, heap overflow, dan stack buffer overflow dapat terjadi. Dalam semua kasus ini, integer overflow bertindak untuk membanjiri struktur memori dengan lebih banyak data daripada yang dapat disimpan oleh struktur tersebut. Luapan ini, dalam program sederhana, sering kali tidak lebih dari menyebabkan kesalahan baca atau tulis yang tidak valid. Manipulasi masalah ini oleh peretas, bagaimanapun, dapat merekayasa kesalahan memori yang dapat menyebabkan masalah yang lebih serius.

Dalam kebanyakan program sederhana, integer overflow bukanlah masalah utama. Batas tipe integer cukup besar sehingga masalah overflow tidak ikut berperan kecuali banyak data sedang ditangani sekaligus. Dalam beberapa kasus overflow dapat dikurangi, seperti dalam kasus penambahan counter, dengan menggunakan tipe data yang lebih besar dengan jangkauan yang lebih besar. Tipe data yang lebih besar, secara teori, pada akhirnya dapat menghadapi masalah luapan yang sama, tetapi karena rentang tipe data semakin besar, peluang untuk melakukannya semakin kecil. Rentang setiap tipe data integer setidaknya dua kali ukuran terkecil berikutnya, sehingga ada banyak ruang untuk data tambahan.