Integer overflow: quando i numeri girano
Gli interi hanno dimensione finita. uint32 a 0xFFFFFFFF + 1 torna 0. Se una dimensione o un indice va in overflow, i controlli saltano.
int len = a + b; // a+b va in overflow -> len piccolo/negativo
char *p = malloc(len); // buffer troppo piccolo
memcpy(p, src, a + b); // ma la copia usa il valore reale -> overflowVarianti: signed/unsigned confusion (un negativo diventa enorme in size_t), overflow in moltiplicazioni (count * size), truncation passando da 64 a 32 bit.
Difesa
Controlli con aritmetica sicura: verifica a > MAX - b prima di sommare, usa funzioni di allocazione che controllano l'overflow (calloc, reallocarray), tipi coerenti (size_t), e sanitizer (-fsanitize=integer) in test.