A block_policy_estimates.dat whose bucket list lacks the infinite last bucket makes a later feerate lookup read past the end of the bucket map.
The estimator relies on the last bucket being infinite, so that every feerate finds a bucket. I reject a list whose first bucket is not positive, that does not strictly increase, or that does not end with the infinite bucket. I tested this with a new unit test that changes one bucket of a valid file at a time. It fails without the change and passes with it.
This is one of several PRs from a large audit of Bitcoin Core that I did with the help of LLM tools. The audit produced its evidence all at once, which is why the PRs arrive together. I understand each change fully and will answer review questions myself.