Merge pull request #8553 from aarlt/inline_asm_function_access

Disallow function access in inline assembly
This commit is contained in:
chriseth 2020-04-01 11:05:30 +02:00 committed by GitHub
commit c11d5b8d1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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.