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.
This PR adds a testcase to reproduce the crash in #18977. What happens is
A
hasN
blocks at tdTa
.B
hasM
blocks at tdTb
.Tb
>Ta
.B
chain consists of a lot more blocks, so that at the point whereTb
surpassesTa
, the block number is more than128
blocks ahead of the head ofA
.Todo: @karalabe take it from here and make the test pass.
@karalabe: Done.
The issue was that when we import very long sidechains, we only reorg the canonical numbers after we exceed the local chain's TD. The pruner however used canonical numbers to figure out which trie to commit when. Since canonical numbers are unavailable until sidechain import is actually done, the pruner accessed non-indexed headers and crashed.
The fix is first of all to not access the canonical number unless actually needed (only when we want to commit, not during normal imports); and second to handle the case when the header numbering is missing by postponing commit to the next block.