char buffer[100];
char buffer_size[40];
int i;
fgets(buffer_size,32,stdin);
i = atoi(buffer_size);
if(i+1 < 100)
if(i>=0)
fgets(buffer,i,stdin);
Bueno, ya que i
podría ser INT_MAX
(0x7FFFFFFF), que es un poco más de 2 mil millones, pero si le agregas 1 obtienes 0x80000000 (justo debajo de los dos mil millones negativos, para entradas firmadas) ... pasa la prueba y terminas tratando de llenar un búfer de 100 bytes con hasta 2 gigas de datos. Eso es malo (y explotable), sí.
Lea otras preguntas en las etiquetas exploit c integer-overflow