Properly validate invalid hex characters in JSONIO libraries

This commit is contained in:
Alex Beregszaszi 2018-02-28 10:44:48 +01:00
parent 83fec0232d
commit 7897301b71
2 changed files with 37 additions and 2 deletions

View File

@ -336,8 +336,20 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
if (!jsonSourceName.isObject())
return formatFatalError("JSONError", "library entry is not a JSON object.");
for (auto const& library: jsonSourceName.getMemberNames())
// @TODO use libraries only for the given source
libraries[library] = h160(jsonSourceName[library].asString());
{
try
{
// @TODO use libraries only for the given source
libraries[library] = h160(jsonSourceName[library].asString());
}
catch (dev::BadHexCharacter)
{
return formatFatalError(
"JSONError",
"Invalid library address (\"" + jsonSourceName[library].asString() + "\") supplied."
);
}
}
}
m_compilerStack.setLibraries(libraries);

View File

@ -610,6 +610,29 @@ BOOST_AUTO_TEST_CASE(libraries_invalid_entry)
BOOST_CHECK(containsError(result, "JSONError", "library entry is not a JSON object."));
}
BOOST_AUTO_TEST_CASE(libraries_invalid_hex)
{
char const* input = R"(
{
"language": "Solidity",
"settings": {
"libraries": {
"library.sol": {
"L": "0x4200000000000000000000000000000000000xx1"
}
}
},
"sources": {
"empty": {
"content": ""
}
}
}
)";
Json::Value result = compile(input);
BOOST_CHECK(containsError(result, "JSONError", "Invalid library address (\"0x4200000000000000000000000000000000000xx1\") supplied."));
}
BOOST_AUTO_TEST_CASE(libraries_various_addresses)
{
char const* input = R"(