diff --git a/Changelog.md b/Changelog.md index 8812bacef..d6d5401f5 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 51739cb01..425e5045b 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 000000000..2a3219ec5 --- /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".