parseRange treated a range of the form "low-" (low article to the
highest available) as malformed and returned an empty (0,0) range, so
OVER/XOVER "n-" returned no articles instead of every article >= n.
RFC 3977 defines a range as a single number, "number-", or
"number-number"; the open-ended form is common in real NNTP clients.
Handle "low-" as (low, MaxInt64), reject specs with more than one dash
(e.g. "1-2-3") as malformed, and keep existing malformed handling so a
bad range still yields an empty range rather than "all articles".
Adds tests for closed, open-ended, empty, and malformed specs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
parseRange previously returned (0, MaxInt64) for unparseable input,
causing OVER/XOVER to deliver the full article overview instead of
returning an empty result. Now returns (0, 0) for any parse error.
Fixes#45
Co-authored-by: root <root@vultr.guest>