Disallow access to functions from inline assembly.

This commit is contained in:
Alexander Arlt 2020-03-30 20:01:50 -05:00 committed by chriseth
parent 3f26f7fb7e
commit 3e649eb8e1
4 changed files with 15 additions and 0 deletions

View File

@ -9,6 +9,7 @@ Compiler Features:
Bugfixes:
* Inline Assembly: Fix internal error when accessing invalid constant variables.
* Inline Assembly: Fix internal error when accessing functions.
* Reference Resolver: Fix internal error when accessing invalid struct members.
* Type Checker: Fix internal errors when assigning nested tuples.
* Inheritance: Allow public state variables to override functions with dynamic memory types in their return values.

View File

@ -740,6 +740,8 @@ bool TypeChecker::visit(InlineAssembly const& _inlineAssembly)
solAssert(!!declaration->type(), "Type of declaration required but not yet determined.");
if (dynamic_cast<FunctionDefinition const*>(declaration))
{
m_errorReporter.declarationError(_identifier.location, "Access to functions is not allowed in inline assembly.");
return size_t(-1);
}
else if (dynamic_cast<VariableDeclaration const*>(declaration))
{

View File

@ -5,3 +5,5 @@ contract C {
}
}
}
// ----
// DeclarationError: (72-73): Access to functions is not allowed in inline assembly.

View File

@ -0,0 +1,10 @@
contract C {
function f() public pure {}
constructor() public {
assembly {
let x := f
}
}
}
// ----
// DeclarationError: (112-113): Access to functions is not allowed in inline assembly.