Pin the stamp rules: empty-array directory manifest refused, stamp-first rows name their refusal, DescribeHeader cases

DirectoryMessagePackBackingStore judges the parsed snapshot's stamp after the stamp-first read (an array with no stamp parses to v1 and was opened as a store). The NewerStampOverUnreadableBody rows assert the fragment each refusal names, plus a binary stamp over a valid body. DescribeHeader gets its suffix, digit-bound and zero-digit cases. Owns findings empty-array-directory-manifest-opens, stamp-first-unpinned-at-store-paths, describe-header-suffix-unpinned.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-22 23:53:10 +02:00
commit 52e6095f5c
2 changed files with 110 additions and 9 deletions

View file

@ -550,6 +550,8 @@ public sealed class DirectoryMessagePackBackingStore : CacheBackingStore
}
var snapshot = read.Snapshot;
// An array with no stamp claims no directory format: it parses to the default v1 without the callback above ever seeing a stamp.
RequireReadableStamp(snapshot.FormatVersion);
var catalogBytes = new Dictionary<CultSchemaCatalogEntry, byte[]>();
for (var index = 0; index < snapshot.SchemaCatalog.Length; index++)
catalogBytes[snapshot.SchemaCatalog[index]] = read.CatalogBytes[index];