diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2016-10-20 07:00:29 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-20 07:00:29 +0800 |
commit | 2bb37f8203d5b64f603d4c7c802407a5500429b5 (patch) | |
tree | 4f121a58173f749100af406b297ae31d3cfb17ba | |
parent | 3bcf0909afca0019841a343ee19ea7dbeef9d667 (diff) | |
parent | 06c69c9062e6823e611bb6c24bfdbaf879421d53 (diff) | |
download | dexon-solidity-2bb37f8203d5b64f603d4c7c802407a5500429b5.tar.gz dexon-solidity-2bb37f8203d5b64f603d4c7c802407a5500429b5.tar.zst dexon-solidity-2bb37f8203d5b64f603d4c7c802407a5500429b5.zip |
Merge pull request #1182 from ethereum/inline-assembly-magic-variables
Disallow magic variables in inline assembly
-rw-r--r-- | Changelog.md | 14 | ||||
-rw-r--r-- | libsolidity/analysis/TypeChecker.cpp | 2 | ||||
-rw-r--r-- | test/libsolidity/InlineAssembly.cpp | 7 |
3 files changed, 17 insertions, 6 deletions
diff --git a/Changelog.md b/Changelog.md index a5a85eb5..ddfd01c3 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,16 +2,18 @@ Features: - * Inline assembly: support both `sucide` and `selfdestruct` opcodes - (note: `suicide` is deprecated) - * Include `keccak256()` as an alias to `sha3()` + * Inline assembly: support both ``suicide`` and ``selfdestruct`` opcodes + (note: ``suicide`` is deprecated). + * Include ``keccak256()`` as an alias to ``sha3()``. Bugfixes: - * Disallow unknown options in `solc` + * Disallow unknown options in ``solc``. * Proper type checking for bound functions. - * Code Generator: expect zero stack increase after `super` as an expression - * Inline assembly: support the `address` opcode + * Code Generator: expect zero stack increase after `super` as an expression. + * Inline assembly: support the ``address`` opcode. * Inline assembly: fix parsing of assignment after a label. + * Inline assembly: external variables of unsupported type (such as ``this``, ``super``, etc.) + are properly detected as unusable. ### 0.4.2 (2016-09-17) diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index ae7c13c8..332ce2c3 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -609,6 +609,8 @@ bool TypeChecker::visit(InlineAssembly const& _inlineAssembly) return false; pushes = 1; } + else + return false; for (unsigned i = 0; i < pushes; ++i) _assembly.append(u256(0)); // just to verify the stack height } diff --git a/test/libsolidity/InlineAssembly.cpp b/test/libsolidity/InlineAssembly.cpp index 45eceb34..f8655c0c 100644 --- a/test/libsolidity/InlineAssembly.cpp +++ b/test/libsolidity/InlineAssembly.cpp @@ -162,6 +162,13 @@ BOOST_AUTO_TEST_CASE(assignment_after_tag) BOOST_CHECK(successParse("{ let x := 1 { tag: =: x } }")); } +BOOST_AUTO_TEST_CASE(magic_variables) +{ + BOOST_CHECK(!successAssemble("{ this }")); + BOOST_CHECK(!successAssemble("{ ecrecover }")); + BOOST_CHECK(successAssemble("{ let ecrecover := 1 ecrecover }")); +} + BOOST_AUTO_TEST_SUITE_END() } |