Skip to main content

Hashing Consecutive Variable Length Arguments

What it detects​

When hashing multiple strings or bytes values using abi.encodePacked, concatenation can cause collisions if lengths are not encoded. This detector spots such hashes where variable-length arguments are placed consecutively without delimiters.

Typical symptoms​

  • abi.encodePacked(a, b) used with both a and b dynamic types
  • Hash collisions possible for different input pairs

Solidity snippet (v0.8.25)​

pragma solidity ^0.8.25;

contract BadHash {
function id(string memory a, string memory b) external pure returns (bytes32) {
// Collisions when strings overlap in concatenation
return keccak256(abi.encodePacked(a, b));
}
}

Why it matters on EVM​

Hash collisions may let attackers impersonate messages or bypass signature checks that rely on a unique hash.