Se la variabile utilizzata per stabilire la dimensione di un VLA assume valore 0 o negativo a runtime, la dichiarazione costituisce comportamento indefinito secondo lo standard C99/C11 e scatena crash immediati dello stack pointer.
VLA_ZERO_SIZE
→
Si verifica su architetture con requisiti rigidi di allineamento (es. ARM o SPARC) quando si tenta di leggere un tipo a 32/64 bit da un indirizzo non multiplo della sua dimensione, oppure accedendo oltre i limiti di un file mappato con mmap.
SIGBUS_UNALIGNED
→
La funzione free() della glibc rileva che un blocco di memoria allocato con malloc viene rilasciato per la seconda volta, interrompendo il processo per prevenire corruzioni dell'heap ed exploit di sicurezza.
DOUBLE_FREE_ABORT
→
Invocare 'free(p)' richiede l'indirizzo esatto restituito originariamente da malloc; se il puntatore è stato incrementato per scorrere i dati ('p++'), passare il puntatore alterato a free corrompe la tabella dei blocchi heap.
FREE_INTERIOR_POINTER
→
L'errore si manifesta quando si invoca free() passando l'indirizzo di una variabile allocata nello stack locale, una stringa letterale costante o un puntatore la cui base è stata alterata da aritmetica dei puntatori.
FREE_INVALID_POINTER
→
La funzione restituisce l'indirizzo '&var' di una variabile locale allocata nel proprio stack frame; non appena la funzione termina, lo stack viene invalidato e qualsiasi accesso al puntatore genera dati corrotti.
RET_PTR_LOCAL_VAR
→
L'accesso a un indice di un blocco allocato con malloc supera la dimensione effettivamente richiesta, sovrascrivendo i metadati interni dell'allocatore di memoria o strutture dati adiacenti.
HEAP_BUFFER_OVERFLOW
→
Se l'area di memoria non può essere espansa sul posto, realloc alloca un nuovo blocco, copia i dati e libera automaticamente il vecchio blocco; continuare a usare il vecchio puntatore costituisce un grave use-after-free.
REALLOC_PTR_INVALIDATION
→