Fix Incorrect String Length Update in toString(int256) for Negative N… #428
+3
−4
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.
Description
The code contains an issue in the handling of negative numbers within the
toString(int256 value)
function, specifically related to updating the string length in memory.Issue
The problem lies in this line:
In the above snippet, the string length is updated at the position of
str
. However, the pointerstr
was already shifted by 1 byte earlier:As a result, the length is written to an incorrect memory location (1 byte earlier), potentially causing data corruption.
Fix
To resolve this, the string length should be written to the original pointer position before shifting
str
. The corrected code is:This ensures that the string length is properly updated in memory without overwriting or misplacing data.
Importance of the Fix
This bug might not immediately surface during testing, as the
toString
function works correctly for positive numbers. However, when handling negative numbers, the issue can lead to corrupted memory and unintended behavior, especially in contracts that rely on precise string manipulations. Fixing this ensures robustness and consistency in handling both positive and negative numbers.Checklist
Ensure you completed all of the steps below before submitting your pull request:
forge snapshot
?npm run lint
?forge test
?