Omniscia 0xPhase Audit
SlotLib Manual Review Findings
SlotLib Manual Review Findings
SLB-01M: Improper Checked Arithmetic
Type | Severity | Location |
---|---|---|
Mathematical Operations | SlotLib.sol:L9 |
Description:
The referenced statement will perform a subtraction of 1
to the provided id
which is expected to be the evaluation of a hash. The reason for this is to prevent hash pre-image attacks whereby the input of the resulting hash is known, however, the code will fail to behave as expected when the provided id
is 0
.
Impact:
While the code does misbehave for an id
of 0
causing the code to fail, the possibility of a hash resulting in 0
is miniscule. As such, we consider this exhibit to be of "informational" severity.
Example:
5/// @notice Returns the slot associated with an id6/// @param id The bytes32 id7/// @return The storage slot8function slot(bytes32 id) internal pure returns (bytes32) {9 return bytes32(uint256(id) - 1);10}
Recommendation:
We advise the code to perform the subtraction using an unchecked
code block as the pre-image protection measure will be valid through underflows occurring at 0
as its purpose is to simply alter the resulting slot offset rather than perform safe arithmetic operations.
Alleviation (3dd3d7bf0c2693b2f9c23bacedfa420393f7ea84):
The slot calculation is now properly performed in an unchecked
code block, ensuring that the id
correctly wraps around the numeric range of a uint256
value.