From c8e31e3466d38ef14e5e279a4e710759cf968be9 Mon Sep 17 00:00:00 2001 From: Bhargava Shastry Date: Mon, 15 Mar 2021 15:37:18 +0100 Subject: [PATCH] Debug prints --- test/tools/ossfuzz/CMakeLists.txt | 1 + test/tools/ossfuzz/SolidityEvmoneInterface.cpp | 2 +- test/tools/ossfuzz/SolidityEvmoneInterface.h | 2 +- test/tools/ossfuzz/solc_ossfuzz.cpp | 17 +++++++++++++++-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/test/tools/ossfuzz/CMakeLists.txt b/test/tools/ossfuzz/CMakeLists.txt index b97942847..95a78f2d4 100644 --- a/test/tools/ossfuzz/CMakeLists.txt +++ b/test/tools/ossfuzz/CMakeLists.txt @@ -25,6 +25,7 @@ endif() if (OSSFUZZ) add_executable(solc_ossfuzz solc_ossfuzz.cpp + ValueGenerator.cpp ../fuzzer_common.cpp ../../TestCaseReader.cpp ../../EVMHost.cpp diff --git a/test/tools/ossfuzz/SolidityEvmoneInterface.cpp b/test/tools/ossfuzz/SolidityEvmoneInterface.cpp index 700deb984..5c2e44f44 100644 --- a/test/tools/ossfuzz/SolidityEvmoneInterface.cpp +++ b/test/tools/ossfuzz/SolidityEvmoneInterface.cpp @@ -83,7 +83,7 @@ optional SolidityCompilationFramework::randomFunction() return {}; else { - uniform_int_distribution d(0, contractABI.size()); + uniform_int_distribution d(0, contractABI.size() - 1); minstd_rand r(contractABI.size()); return contractABI[d(r)]; } diff --git a/test/tools/ossfuzz/SolidityEvmoneInterface.h b/test/tools/ossfuzz/SolidityEvmoneInterface.h index 94e899a53..aaaacda5c 100644 --- a/test/tools/ossfuzz/SolidityEvmoneInterface.h +++ b/test/tools/ossfuzz/SolidityEvmoneInterface.h @@ -46,7 +46,7 @@ struct CompilerInput std::string const& _contractName, frontend::OptimiserSettings _optimiserSettings, std::map _libraryAddresses, - bool _debugFailure = false, + bool _debugFailure = true, bool _viaIR = false ): evmVersion(_evmVersion), diff --git a/test/tools/ossfuzz/solc_ossfuzz.cpp b/test/tools/ossfuzz/solc_ossfuzz.cpp index 42ca5ed24..21b2440d7 100644 --- a/test/tools/ossfuzz/solc_ossfuzz.cpp +++ b/test/tools/ossfuzz/solc_ossfuzz.cpp @@ -20,6 +20,8 @@ #include +#include + #include #include @@ -70,7 +72,7 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t const* _data, size_t _size) contractName, compilerSetting, {}, - false, + true, false }; EvmoneUtility evmoneUtil( @@ -87,7 +89,13 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t const* _data, size_t _size) optional noInputFunction = evmoneUtil.noInputFunction(); if (auto r = evmoneUtil.randomFunction(); r.has_value()) + { cout << ContractABIUtils{}.functionSignatureFromABI(r.value()) << endl; + for (auto const& i: r.value()["inputs"]) + if (auto v = ValueGenerator{i["type"].asString(), 0}.type(); v.has_value()) + cout << v.value().name << endl; + return 0; + } if (noInputFunction.has_value()) evmoneUtil.methodName(noInputFunction.value()); else @@ -153,18 +161,23 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t const* _data, size_t _size) } catch (runtime_error const&) { + cout << "Runtime error!" << endl; return 0; } catch (solidity::langutil::UnimplementedFeatureError const&) { + cout << "Unimplemented feature!" << endl; return 0; } - catch (solidity::langutil::CompilerError const&) + catch (solidity::langutil::CompilerError const& _e) { + cout << "Compiler error!" << endl; + cout << _e.what() << endl; return 0; } catch (solidity::yul::StackTooDeepError const&) { + cout << "Stack too deep" << endl; return 0; } }