Handle attempts to get block headers at invalid heights #3683
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Twofold 'belt and suspender' fix for #3681:
get_header_hash_by_height
intxhashset
to return an error if the header height requested is too large forpmmr::insertion_to_pmmr_index
to handle. Note there's no error handling in the core pmmr functions (which all assume arguments are correct, rightly or wrongly), so this check is placed as close to it as possible.get_server_stats
code. Note the call toget_header_by_height
is now needed here due to earlier performance optimizations on DifficultyIterator that removed the deserialization of proof nonces and left iterator entries unable to calculate their hash.Either fix on its own would work, but
get_header_by_height
should be returning an error for invalid heights, while the call to it fromget_server_stats
shouldn't be attempting to provide invalid heights via an incorrect cast. (Note that casting from i64 to u64 is allowed in rust regardless of value, meaning that -59i64 to u64 results in 18446744073709551557).