mirror of
https://github.com/Routstr/routstr-core.git
synced 2026-10-05 20:28:23 +00:00
`inf > 0` is True, so an infinite rate read as a real price: it was imported, served, routed, and would bill an infinite amount. `NaN` is worse — every comparison with it is False, so it slipped past both the negative and the both-zero guards. Rates arrive from upstream catalogs as well as the admin edge, and `json.loads` accepts the bare `NaN`/`Infinity` literals and overflows `1e999` to `inf`, so the finiteness check goes in the catalog import filter and in each resolver rung that reports a resolved price rather than at one entry point. An oversized integer raises `OverflowError` instead of `ValueError`, so coercion catches that too — unhandled it unwound the whole fetch and cost the node an entire upstream catalog over one junk entry. A malformed *cache* rate costs only the cache rate: it is dropped and billing falls back to the full input rate, which is what a missing cache rate means. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011cKHVF5LA7TR5QuYi6ErLM