fix: [spearbit-32] Remove extra iteration for length check in AssociatedLinkedListSet #115
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.
Motivation
https://github.com/spearbit-audits/alchemy-nov-review/issues/32
AssociatedLinkedListSetLib
iterates over the set twice, once to get the length and once to collect the elements. However,LinkedListSetLib
already has an implementation that does not require an extra iteration over all elements, because the returned array is constructed as the elements are loaded. This causes an extra gas overhead forAssociatedLinkedListSetLib
.Solution
Port over the logic from
LinkedListSetLib
's implementation ofgetAll
toAssociatedLinkedListSetLib
's implementation.Because the mapping lookups are handled differently due to the extra elements in the key buffer, we first convert the
TempBytesMemory
into a type that is effectively a "bytes memory" by adding its size to the free memory pointer.