diff options
author | Sergiusz Bazanski <q3k@q3k.org> | 2017-10-04 01:48:53 +0800 |
---|---|---|
committer | Daniel Kirchner <daniel@ekpyron.org> | 2018-04-06 17:03:52 +0800 |
commit | f39f36f2c7f38ecc8c171447de4c65c8cb968640 (patch) | |
tree | a5c00ddf4943796cb0be0b0e8849dd6b98fd2c68 | |
parent | 309a90bb5da06a5f54cd976b7da647e3bfece2e3 (diff) | |
download | dexon-solidity-f39f36f2c7f38ecc8c171447de4c65c8cb968640.tar.gz dexon-solidity-f39f36f2c7f38ecc8c171447de4c65c8cb968640.tar.zst dexon-solidity-f39f36f2c7f38ecc8c171447de4c65c8cb968640.zip |
Fix file missing error message on imports.
Trying to convert an import path into a Boost canonical path causes
boost to throw an exception if the given file does not exist. Thus,
instead of geting to the 'File not found' error, we instead got into the
cath-all handler for 'Unknown exception in read callback'.
This change rearranges the file checks to happen before we create a
canonical Boost path. It also drive-by removes the unnecessary 'else'
block, as the body of the if is a guard-like return block.
-rw-r--r-- | solc/CommandLineInterface.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index 8f81e799..93203de6 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -700,7 +700,13 @@ bool CommandLineInterface::processInput() try { auto path = boost::filesystem::path(_path); + if (!boost::filesystem::exists(path)) + return ReadCallback::Result{false, "File not found."}; + auto canonicalPath = boost::filesystem::canonical(path); + if (!boost::filesystem::is_regular_file(canonicalPath)) + return ReadCallback::Result{false, "Not a valid file."}; + bool isAllowed = false; for (auto const& allowedDir: m_allowedDirectories) { @@ -716,16 +722,10 @@ bool CommandLineInterface::processInput() } if (!isAllowed) return ReadCallback::Result{false, "File outside of allowed directories."}; - else if (!boost::filesystem::exists(path)) - return ReadCallback::Result{false, "File not found."}; - else if (!boost::filesystem::is_regular_file(canonicalPath)) - return ReadCallback::Result{false, "Not a valid file."}; - else - { - auto contents = dev::readFileAsString(canonicalPath.string()); - m_sourceCodes[path.string()] = contents; - return ReadCallback::Result{true, contents}; - } + + auto contents = dev::readFileAsString(canonicalPath.string()); + m_sourceCodes[path.string()] = contents; + return ReadCallback::Result{true, contents}; } catch (Exception const& _exception) { |