mirror of
https://github.com/simplex-chat/simplexmq.git
synced 2026-07-12 05:19:33 +00:00
9e4d8d95c0
The bare-name fallback and bareDomain parser would otherwise consume arbitrarily many non-space bytes via takeWhile1 before any validation or length check. A crafted multi-megabyte token would be decoded as UTF-8 and re-parsed in full before being rejected. Introduce `boundedNonSpace` (scan with 253-byte cap) at the two takeWhile1 sites. Inputs longer than 253 bytes leave residue that parseOnly's implicit endOfInput rejects, so the parser fails fast without ever allocating the full input. The bound is the DNS full-domain limit, chosen for being a familiar ceiling generous enough to cover any realistic SimpleX name (longest plausible @user.subdomain.simplex stays well under 100 bytes). No per-label cap — SimpleX names don't go through DNS label resolution and there's no semantic reason to constrain individual labels.
Running tests with coverage
- Uncomment coverage sections in cabal.project file.
- Add
-fhpcto ghc-options of simplexmq-test in simplexmq.cabal file. - Disable (
xit) test "should subscribe to multiple (200) subscriptions with batching", enable (commentskip) the next test instead. - Run
cabal test. - Open generated coverage report in the browser.