Quick answer: GameMaker buffer_write_string adding a null terminator byte? C-string semantics; subsequent reads see N+1 bytes.
Serialize a 10-char string; read back gets 11 bytes (10 + null); offset calculations break.
Length-prefix instead
buffer_write(buf, buffer_u32, len);
buffer_write_text(buf, str);Explicit length; no null surprise.
Or use buffer_text
Doesn't include null terminator. Cleaner for length-prefixed.
Audit string write callers
Each call's expected size. Null terminator surprises = bug.
“buffer_write_string is C-string-ish. Modern serialization wants explicit lengths.”
Standardize on buffer_text + length prefix for new code. C-string semantics aren't usually what you want.