Files
routstr-core/routstr/upstream
Jeroen UbbinkandClaude Opus 5 89e6acef4d fix(pricing): treat a non-finite rate as no price wherever pricing is ingested
`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
2026-08-25 16:16:15 +02:00
..
2026-06-13 23:40:39 +02:00
2026-06-27 16:01:45 +02:00
2026-08-23 11:06:06 +02:00
2026-08-02 23:16:01 +02:00
2026-07-26 02:38:07 +02:00