Skip to main content
← Lab

arrwiden

confirmedupstream bugC++ · CPUInference & servingJuly 13, 2026

the question

Does a GGUF that declares tokenizer.ggml.suppress_tokens as an INT8 array cause a heap over-read when llama.cpp loads the vocabulary?

what came out

Confirmed bug. gguf_get_arr_n returns the byte count for an INT8 array, and the loader reinterprets the N-byte buffer as N int32, copying 4*N bytes for a 3*N-byte over-read. A 64Mi INT8 suppress array crashes model load with SIGSEGV; a same-byte-size INT32 array loads cleanly. Poisoned-model DoS on the default load path.

method & receipts

  • Result: confirmed
  • Pre-registered the prediction was written down and committed before the run.
  • Reproducible one script re-runs the whole thing from scratch.
  • Tested — a correctness/benchmark suite ships alongside the code.

→ read the code and re-run it

github.com/v-code01/arrwiden