SIGN IN SIGN UP

fix(crash): consume-once field path + hard-bound the path walk (fatal AV)

slap/multi-field deltas crashed: WriteFieldList buffers path + value streams
separately, so a BitCopy isn't guaranteed a matching GetBitRange -> the
thread-static _currentFieldPath went stale, resolved against the wrong field,
and the index walk dereferenced an unmapped page. .NET can't catch the
resulting AccessViolation (CSE) -> fatal, confirming the try/catch was useless.

Fix: (1) consume-once — capture + clear _currentFieldPath each ValueCopyHook, so
a copy without a fresh path passes through instead of reusing a stale one;
(2) validate the path ptr on capture; (3) bound every path index against the
serializer field-array length (CUtlVector size @ +0x28) with a 4096 hard-cap
backstop, so a stale/garbage index can never deref off the array; (4) tighten
path depth to <=3. Plus temporary encoder-map boot diagnostics (empty-map debug).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P
Prefix committed
d7ff4c4bf8b6e6abe0d7b41c111f7d0e53dea236
Parent: 49ebeac