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);
Bene, dal momento che i
potrebbe essere INT_MAX
(0x7FFFFFFF), che è poco più di 2 miliardi, ma se ne aggiungi 1 ricevi 0x80000000 (appena sotto due miliardi negativi, per i segni firmati) ... quello passa il test e si finisce per tentare di riempire un buffer da 100 byte con un massimo di 2 gigabyte di dati. Questo è male (e sfruttabile), sì.
Leggi altre domande sui tag c exploit integer-overflow