public sealed class AssetMetaTargetA .meta sidecar, read twice and the two answers compared.
Remarks
The fifth of the formats doc 12 asked for, and the one a person edits. A bundle and a chunk are written by the content build; a sidecar is committed text that authors merge, resolve conflicts in by hand, and occasionally write from scratch. Every project the editor opens walks every one of them, so a sidecar that can crash the reader is a project that cannot be opened — and the file that does it arrives through a pull request rather than through a socket.
⚠ Three refusals and nothing else. YamlParseException for text that is not the dialect, MetaVersionException for a file a newer editor wrote, and YamlBindingException for one that is YAML but not this schema. Those are what AssetMetaFile.Read documents and what both of its production callers filter on, so anything else — an IndexOutOfRangeException out of the line scanner, an InvalidCastException out of the binder, a KeyNotFoundException out of the migration chain — reaches the session and is the finding. ArgumentException is not on the list, unlike the heightmap's, because a null argument is a caller's bug here rather than a bad file.
Both readers, because there are two and they must not disagree. MetaScanner is a hand-written line scanner that exists so an index rebuild of a hundred thousand assets can read three lines of each instead of parsing all of it, and its own remarks say a wrong answer is a corrupt index. That makes the pair a differential oracle in the shape TransportTargets already uses for chunked against whole reads: when both readers answer, the fast one must have got the same envelope as the slow one. Neither oracle alone sees this — the scanner never throws, so "nothing escaped" is true of every wrong answer it gives.
Fields and properties (2)
public string NameWhat to call it on a command line and in a report.
public string WhatWhich receive path this is, in one line.
Methods (3)
public long AllowanceFor(int inputLength)How many bytes an input may cause to be allocated.
public void Seed(ICollection<byte[]> corpus)Adds well-formed inputs for the mutator to start from.
public long Run(ReadOnlySpan<byte> input)Pushes one input through the decoder.
Used by (1)
- FuzzTargetsVixen.Fuzz