diff options
author | chriseth <chris@ethereum.org> | 2018-02-19 22:26:06 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-19 22:26:06 +0800 |
commit | 839acafb9590c24da9446fc66f8a26939210eeb3 (patch) | |
tree | 59d3cb61d7b4e470960eb87aa946fb6e24062b3c | |
parent | 3f7e82d00ba6b0a9c1e7644b8613aa2126498893 (diff) | |
parent | 1d4547ab037db2f21fcb31219ae28a1d295ab270 (diff) | |
download | dexon-solidity-839acafb9590c24da9446fc66f8a26939210eeb3.tar.gz dexon-solidity-839acafb9590c24da9446fc66f8a26939210eeb3.tar.zst dexon-solidity-839acafb9590c24da9446fc66f8a26939210eeb3.zip |
Merge pull request #3502 from aarlt/minor_fix_no_input_sources_specified
Minor improvement: Check sources
-rw-r--r-- | Changelog.md | 2 | ||||
-rw-r--r-- | libsolidity/interface/StandardCompiler.cpp | 6 | ||||
-rw-r--r-- | test/libsolidity/StandardCompiler.cpp | 36 |
3 files changed, 42 insertions, 2 deletions
diff --git a/Changelog.md b/Changelog.md index d4e91c26..c856839e 100644 --- a/Changelog.md +++ b/Changelog.md @@ -6,7 +6,7 @@ Features: Bugfixes: - + * Standard JSON: catch errors properly when invalid "sources" are passed ### 0.4.20 (2018-02-14) diff --git a/libsolidity/interface/StandardCompiler.cpp b/libsolidity/interface/StandardCompiler.cpp index 04f5bd25..84dedfb8 100644 --- a/libsolidity/interface/StandardCompiler.cpp +++ b/libsolidity/interface/StandardCompiler.cpp @@ -236,7 +236,11 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input) return formatFatalError("JSONError", "Only \"Solidity\" is supported as a language."); Json::Value const& sources = _input["sources"]; - if (!sources) + + if (!sources.isObject() && !sources.isNull()) + return formatFatalError("JSONError", "\"sources\" is not a JSON object."); + + if (sources.empty()) return formatFatalError("JSONError", "No input sources specified."); Json::Value errors = Json::arrayValue; diff --git a/test/libsolidity/StandardCompiler.cpp b/test/libsolidity/StandardCompiler.cpp index e48624e5..8da536d8 100644 --- a/test/libsolidity/StandardCompiler.cpp +++ b/test/libsolidity/StandardCompiler.cpp @@ -154,6 +154,42 @@ BOOST_AUTO_TEST_CASE(no_sources) BOOST_CHECK(containsError(result, "JSONError", "No input sources specified.")); } +BOOST_AUTO_TEST_CASE(no_sources_empty_object) +{ + char const* input = R"( + { + "language": "Solidity", + "sources": {} + } + )"; + Json::Value result = compile(input); + BOOST_CHECK(containsError(result, "JSONError", "No input sources specified.")); +} + +BOOST_AUTO_TEST_CASE(no_sources_empty_array) +{ + char const* input = R"( + { + "language": "Solidity", + "sources": [] + } + )"; + Json::Value result = compile(input); + BOOST_CHECK(containsError(result, "JSONError", "\"sources\" is not a JSON object.")); +} + +BOOST_AUTO_TEST_CASE(sources_is_array) +{ + char const* input = R"( + { + "language": "Solidity", + "sources": ["aa", "bb"] + } + )"; + Json::Value result = compile(input); + BOOST_CHECK(containsError(result, "JSONError", "\"sources\" is not a JSON object.")); +} + BOOST_AUTO_TEST_CASE(smoke_test) { char const* input = R"( |