v2.1.10
Assurance: hostile-input fuzz CI gate + per-parser resource-bound tests
Promotes the hostile-input fuzz suites from incidental coverage under the
generic test job to a dedicated, separately-visible CI gate, and locks the named
resource caps at every parser boundary with oversized-input assertions (the
roadmap "Resilient" track: proven resource bounds, fuzz promoted to a gate).
- New
hostile_inputpytest marker and a dedicatedhostile-input-fuzzCI job
that runs the marked tests at a higher Hypothesis example budget (aci-fuzz
profile, loaded whenRECON_FUZZis set). The render and Bayesian fuzz suites
and the resilience-hardening tests carry the marker; they still run inside the
normal test job where they count toward coverage, so a parser-bound regression
is now its own red check. tests/test_hostile_input_bounds.pydrives crafted oversized / flooded /
malformed input straight at each parser and asserts the cap holds: userrealm
_MAX_AUTODISCOVER_DOMAINS; crt.sh_MAX_SANS_PER_CERTand
_MAX_CRTSH_CERT_SUMMARY_ENTRIES; the CT burst and wildcard-cluster caps; the
SPF redirect depth bound; and the DMARC rua extraction under a mailto flood.- The Autodiscover XML parser now degrades cleanly on a defusedxml
entity-expansion (billion-laughs) or external-entity (XXE) payload: those
raiseEntitiesForbidden/ExternalReferenceForbidden(notParseError),
which previously propagated out of the parser; the guard now catches the
defusedxml base exception and returns an empty result, asserted by the gate.
Gate: full pytest (2867 passed), ruff, pyright (0 errors), validate_fingerprint (841), branch coverage 85%.