mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #5050 from ethereum/standard-json-crashes
Add proper error reporting when invalid settings are provided in StandardJSON
This commit is contained in:
commit
5dd3ee2d96
@ -280,6 +280,8 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
|
|||||||
|
|
||||||
for (auto const& url: sources[sourceName]["urls"])
|
for (auto const& url: sources[sourceName]["urls"])
|
||||||
{
|
{
|
||||||
|
if (!url.isString())
|
||||||
|
return formatFatalError("JSONError", "URL must be a string.");
|
||||||
ReadCallback::Result result = m_readFile(url.asString());
|
ReadCallback::Result result = m_readFile(url.asString());
|
||||||
if (result.success)
|
if (result.success)
|
||||||
{
|
{
|
||||||
@ -320,7 +322,9 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
|
|||||||
|
|
||||||
if (settings.isMember("evmVersion"))
|
if (settings.isMember("evmVersion"))
|
||||||
{
|
{
|
||||||
boost::optional<EVMVersion> version = EVMVersion::fromString(settings.get("evmVersion", {}).asString());
|
if (!settings["evmVersion"].isString())
|
||||||
|
return formatFatalError("JSONError", "evmVersion must be a string.");
|
||||||
|
boost::optional<EVMVersion> version = EVMVersion::fromString(settings["evmVersion"].asString());
|
||||||
if (!version)
|
if (!version)
|
||||||
return formatFatalError("JSONError", "Invalid EVM version requested.");
|
return formatFatalError("JSONError", "Invalid EVM version requested.");
|
||||||
m_compilerStack.setEVMVersion(*version);
|
m_compilerStack.setEVMVersion(*version);
|
||||||
@ -329,6 +333,8 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
|
|||||||
vector<CompilerStack::Remapping> remappings;
|
vector<CompilerStack::Remapping> remappings;
|
||||||
for (auto const& remapping: settings.get("remappings", Json::Value()))
|
for (auto const& remapping: settings.get("remappings", Json::Value()))
|
||||||
{
|
{
|
||||||
|
if (!remapping.isString())
|
||||||
|
return formatFatalError("JSONError", "Remapping entry must be a string.");
|
||||||
if (auto r = CompilerStack::parseRemapping(remapping.asString()))
|
if (auto r = CompilerStack::parseRemapping(remapping.asString()))
|
||||||
remappings.emplace_back(std::move(*r));
|
remappings.emplace_back(std::move(*r));
|
||||||
else
|
else
|
||||||
@ -349,9 +355,11 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
|
|||||||
{
|
{
|
||||||
auto const& jsonSourceName = jsonLibraries[sourceName];
|
auto const& jsonSourceName = jsonLibraries[sourceName];
|
||||||
if (!jsonSourceName.isObject())
|
if (!jsonSourceName.isObject())
|
||||||
return formatFatalError("JSONError", "library entry is not a JSON object.");
|
return formatFatalError("JSONError", "Library entry is not a JSON object.");
|
||||||
for (auto const& library: jsonSourceName.getMemberNames())
|
for (auto const& library: jsonSourceName.getMemberNames())
|
||||||
{
|
{
|
||||||
|
if (!jsonSourceName[library].isString())
|
||||||
|
return formatFatalError("JSONError", "Library address must be a string.");
|
||||||
string address = jsonSourceName[library].asString();
|
string address = jsonSourceName[library].asString();
|
||||||
|
|
||||||
if (!boost::starts_with(address, "0x"))
|
if (!boost::starts_with(address, "0x"))
|
||||||
|
@ -640,7 +640,7 @@ BOOST_AUTO_TEST_CASE(libraries_invalid_entry)
|
|||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
Json::Value result = compile(input);
|
Json::Value result = compile(input);
|
||||||
BOOST_CHECK(containsError(result, "JSONError", "library entry is not a JSON object."));
|
BOOST_CHECK(containsError(result, "JSONError", "Library entry is not a JSON object."));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(libraries_invalid_hex)
|
BOOST_AUTO_TEST_CASE(libraries_invalid_hex)
|
||||||
|
Loading…
Reference in New Issue
Block a user