diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2018-04-19 06:47:56 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-04-19 21:58:14 +0800 |
commit | 754d79edfabd8a199a51411a865d75274fcb4169 (patch) | |
tree | 0c11c8a093eb61fb6c0d4290c48b3e3cf2ae3055 | |
parent | 39b7b44a8d63c9e50911ba724221b4a6399e7f5e (diff) | |
download | dexon-solidity-754d79edfabd8a199a51411a865d75274fcb4169.tar.gz dexon-solidity-754d79edfabd8a199a51411a865d75274fcb4169.tar.zst dexon-solidity-754d79edfabd8a199a51411a865d75274fcb4169.zip |
Disallow explicit conversion of bytesXX to contract
-rw-r--r-- | Changelog.md | 1 | ||||
-rw-r--r-- | libsolidity/ast/Types.cpp | 1 | ||||
-rw-r--r-- | test/libsolidity/syntaxTests/types/bytes_to_contract.sol | 7 |
3 files changed, 8 insertions, 1 deletions
diff --git a/Changelog.md b/Changelog.md index 8812bace..d6d5401f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,6 +8,7 @@ Features: Bugfixes: * Type Checker: Do not complain about new-style constructor and fallback function to have the same name. * Type Checker: Detect multiple constructor declarations in the new syntax and old syntax. + * Type Checker: Explicit conversion of ``bytesXX`` to ``contract`` is properly disallowed. ### 0.4.22 (2018-04-16) diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index 51739cb0..425e5045 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -1299,7 +1299,6 @@ bool FixedBytesType::isExplicitlyConvertibleTo(Type const& _convertTo) const { return _convertTo.category() == Category::Integer || _convertTo.category() == Category::FixedPoint || - _convertTo.category() == Category::Contract || _convertTo.category() == category(); } diff --git a/test/libsolidity/syntaxTests/types/bytes_to_contract.sol b/test/libsolidity/syntaxTests/types/bytes_to_contract.sol new file mode 100644 index 00000000..2a3219ec --- /dev/null +++ b/test/libsolidity/syntaxTests/types/bytes_to_contract.sol @@ -0,0 +1,7 @@ +contract C { + function f() public pure { + C(bytes20(0x1234)); + } +} +// ---- +// TypeError: (64-82): Explicit type conversion not allowed from "bytes20" to "contract C". |