From fd448f2c1851fe07db724cd11191606649b7ede0 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Thu, 25 Oct 2018 14:21:43 +0200 Subject: [PATCH] Validate the function signature of main in binaryen --- src/binaryen.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/binaryen.cpp b/src/binaryen.cpp index 61ab41bd4..83f396ee2 100644 --- a/src/binaryen.cpp +++ b/src/binaryen.cpp @@ -567,6 +567,22 @@ void BinaryenEngine::verifyContract(wasm::Module & module) "Contract exports more than (\"main\") and (\"memory\")." ); + wasm::Export* main_export = module.getExport(wasm::Name("main")); + + wasm::Function* main_function = module.getFunctionOrNull(main_export->value); + ensureCondition( + main_function, + ContractValidationFailure, + "Contract is invalid. \"main\" export doesn't point to a function." + ); + + ensureCondition( + (main_function->getNumParams() == 0) && + (main_function->result == wasm::Type::none), + ContractValidationFailure, + "Contract is invalid. \"main\" has an invalid signature." + ); + for (auto const& import: module.imports) { ensureCondition( import->module == wasm::Name("ethereum")