Round-7 blocker-1 residual: the PyYAML-absent line-parser fallback in detect-platform.sh (_strip_scalar) returned a stringified scalar for UNQUOTED YAML values that PyYAML's implicit resolver types as a non-string (int/null/bool/float/timestamp). That bypassed _accept's isinstance(str) guard and could surface a garbage credential (e.g. "12345", "null", "true") where the PyYAML path resolves NO token and fails closed -- violating the module invariant that the fallback is only ever MORE conservative than PyYAML, never less. Root cause fix: mirror PyYAML 6.0.3's SafeLoader implicit resolver. An unquoted plain scalar matching the null/bool/int/float/timestamp forms now returns None (fail closed); a quoted scalar is always a string and is accepted verbatim (quote-stripped) as before. Quoted-string handling, scope-aware attribution, indentation, and inline-comment stripping are unchanged. The predicate was fuzzed against real PyYAML over ~800k random tokens with zero fail-open divergences. Extends the forced-PyYAML-absence parser-equivalence harness with token: 12345/null/~/yes/true/3.14 (each fails closed identically to PyYAML) and token: "12345"/'abc' (quoted literals still accepted). Blockers 2/3/4 (port-bound host, origin+full-path URL pin, review-body binding) are untouched. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
18 KiB
Executable File
18 KiB
Executable File