From 14196f2621cbc3a7580ae05b6f7508c92467168a Mon Sep 17 00:00:00 2001 From: chriseth Date: Tue, 14 Mar 2017 11:58:43 +0100 Subject: Allow long library names. --- Changelog.md | 1 + solc/CommandLineInterface.cpp | 11 ++++++++++- test/cmdlineTests.sh | 3 +++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 8e9780c0..577487a2 100644 --- a/Changelog.md +++ b/Changelog.md @@ -12,6 +12,7 @@ Features: Bugfixes: * Commandline interface: Always escape filenames (replace ``/``, ``:`` and ``.`` with ``_``). * Commandline interface: Do not try creating paths ``.`` and ``..``. + * Commandline interface: Allow long library names. * Parser: Disallow octal literals. * Type system: Fix a crash caused by continuing on fatal errors in the code. * Type system: Disallow compound assignment for tuples. diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index 0c777c77..31f70272 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -420,7 +420,16 @@ void CommandLineInterface::readInputFilesAndConfigureRemappings() bool CommandLineInterface::parseLibraryOption(string const& _input) { namespace fs = boost::filesystem; - string data = fs::is_regular_file(_input) ? contentsString(_input) : _input; + string data = _input; + try + { + if (fs::is_regular_file(_input)) + data = contentsString(_input); + } + catch (fs::filesystem_error const&) + { + // Thrown e.g. if path is too long. + } vector libraries; boost::split(libraries, data, boost::is_space() || boost::is_any_of(","), boost::token_compress_on); diff --git a/test/cmdlineTests.sh b/test/cmdlineTests.sh index fc04bd7d..e2ee6a5e 100755 --- a/test/cmdlineTests.sh +++ b/test/cmdlineTests.sh @@ -50,6 +50,9 @@ echo "Testing library checksum..." echo '' | "$SOLC" --link --libraries a:0x90f20564390eAe531E810af625A22f51385Cd222 ! echo '' | "$SOLC" --link --libraries a:0x80f20564390eAe531E810af625A22f51385Cd222 2>/dev/null +echo "Testing long library names..." +echo '' | "$SOLC" --link --libraries aveeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerylonglibraryname:0x90f20564390eAe531E810af625A22f51385Cd222 + echo "Testing overwriting files" TMPDIR=$(mktemp -d) ( -- cgit