diff options
author | chriseth <chris@ethereum.org> | 2018-11-30 01:33:54 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-11-30 23:30:19 +0800 |
commit | 4f992298c6381b3c7ea41462bce749850b5846e5 (patch) | |
tree | 0321eb675b2e8acc7c301221b0d731907443f936 /libsolidity/analysis/ContractLevelChecker.cpp | |
parent | 6d1644e55c03850341e6bfcc4ae46f8de264a039 (diff) | |
download | dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.gz dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.bz2 dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.lz dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.xz dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.tar.zst dexon-solidity-4f992298c6381b3c7ea41462bce749850b5846e5.zip |
Move hash collisions checks.
Diffstat (limited to 'libsolidity/analysis/ContractLevelChecker.cpp')
-rw-r--r-- | libsolidity/analysis/ContractLevelChecker.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/libsolidity/analysis/ContractLevelChecker.cpp b/libsolidity/analysis/ContractLevelChecker.cpp index e2208f3f..419ebe93 100644 --- a/libsolidity/analysis/ContractLevelChecker.cpp +++ b/libsolidity/analysis/ContractLevelChecker.cpp @@ -43,6 +43,7 @@ bool ContractLevelChecker::check(ContractDefinition const& _contract) checkConstructor(_contract); checkFallbackFunction(_contract); checkExternalTypeClashes(_contract); + checkHashCollisions(_contract); return Error::containsOnlyWarnings(m_errorReporter.errors()); } @@ -420,3 +421,18 @@ void ContractLevelChecker::checkExternalTypeClashes(ContractDefinition const& _c "Function overload clash during conversion to external types for arguments." ); } + +void ContractLevelChecker::checkHashCollisions(ContractDefinition const& _contract) +{ + set<FixedHash<4>> hashes; + for (auto const& it: _contract.interfaceFunctionList()) + { + FixedHash<4> const& hash = it.first; + if (hashes.count(hash)) + m_errorReporter.typeError( + _contract.location(), + string("Function signature hash collision for ") + it.second->externalSignature() + ); + hashes.insert(hash); + } +} |