Fix memory leak in merkle verification (#3039)

pull/3046/head
Hadrien Croubois 3 years ago committed by GitHub
parent e667ec9533
commit cafd900ad6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      contracts/utils/cryptography/MerkleProof.sol

@ -41,12 +41,20 @@ library MerkleProof {
bytes32 proofElement = proof[i]; bytes32 proofElement = proof[i];
if (computedHash <= proofElement) { if (computedHash <= proofElement) {
// Hash(current computed hash + current element of the proof) // Hash(current computed hash + current element of the proof)
computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); computedHash = _efficientHash(computedHash, proofElement);
} else { } else {
// Hash(current element of the proof + current computed hash) // Hash(current element of the proof + current computed hash)
computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); computedHash = _efficientHash(proofElement, computedHash);
} }
} }
return computedHash; return computedHash;
} }
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
} }

Loading…
Cancel
Save