Fix large, backwards, memory.copy with fuel/epochs#13577
Merged
Conversation
This commit fixes a bug in the previous refactorings of `memory.copy` or other bulk copy instructions. Notably when fuel/epochs were enabled the operation was chunked up to check fuel between each operation, but the advancement of what to do unconditionally went forwards. When a backwards copy is required this means that data could get corrupted if the src/dst regions are overlapping. The fix here is to setup a separate backwards-copy loop which handles this case so the fuel/epoch-metered copy goes either backwards or forwards depending on what's being copied.
alexcrichton
added a commit
that referenced
this pull request
Jun 6, 2026
* Fix large, backwards, `memory.copy` with fuel/epochs (#13577) This commit fixes a bug in the previous refactorings of `memory.copy` or other bulk copy instructions. Notably when fuel/epochs were enabled the operation was chunked up to check fuel between each operation, but the advancement of what to do unconditionally went forwards. When a backwards copy is required this means that data could get corrupted if the src/dst regions are overlapping. The fix here is to setup a separate backwards-copy loop which handles this case so the fuel/epoch-metered copy goes either backwards or forwards depending on what's being copied. * Fix corrupted pooling allocator state on OOM (#13579) This commit fixes an issue where if the pooling allocator generated OOM at just the right time then it would leave the pooling allocator in a corrupt state where the instance count was incremented, never decremented. This additionally fixes a separate issue where if an OOM happened just a bit later then it would mean that tables/memories from the pooling allocator would leak and not be properly destroyed within the allocator, leaking their slots.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 commit fixes a bug in the previous refactorings of
memory.copyor other bulk copy instructions. Notably when fuel/epochs were enabled the operation was chunked up to check fuel between each operation, but the advancement of what to do unconditionally went forwards. When a backwards copy is required this means that data could get corrupted if the src/dst regions are overlapping. The fix here is to setup a separate backwards-copy loop which handles this case so the fuel/epoch-metered copy goes either backwards or forwards depending on what's being copied.