aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2016-10-20 07:00:29 +0800
committerGitHub <noreply@github.com>2016-10-20 07:00:29 +0800
commit2bb37f8203d5b64f603d4c7c802407a5500429b5 (patch)
tree4f121a58173f749100af406b297ae31d3cfb17ba
parent3bcf0909afca0019841a343ee19ea7dbeef9d667 (diff)
parent06c69c9062e6823e611bb6c24bfdbaf879421d53 (diff)
downloaddexon-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.md14
-rw-r--r--libsolidity/analysis/TypeChecker.cpp2
-rw-r--r--test/libsolidity/InlineAssembly.cpp7
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()
}