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