Preserve original newlines in solidity::util::readUntilEnd()

This commit is contained in:
TerranCivilian 2021-07-03 13:30:44 -04:00 committed by Kamil Śliwak
parent 967b282159
commit 020ecc2131
4 changed files with 30 additions and 12 deletions

View File

@ -9,6 +9,7 @@ Compiler Features:
Bugfixes: Bugfixes:
* Commandline Interface: Fix extra newline character being appended to sources passed through standard input, affecting their hashes.
* SMTChecker: Fix internal error in magic type access (``block``, ``msg``, ``tx``). * SMTChecker: Fix internal error in magic type access (``block``, ``msg``, ``tx``).

View File

@ -74,16 +74,9 @@ string solidity::util::readFileAsString(boost::filesystem::path const& _file)
string solidity::util::readUntilEnd(istream& _stdin) string solidity::util::readUntilEnd(istream& _stdin)
{ {
string ret; ostringstream ss;
while (!_stdin.eof()) ss << _stdin.rdbuf();
{ return ss.str();
string tmp;
// NOTE: this will read until EOF or NL
getline(_stdin, tmp);
ret.append(tmp);
ret.append("\n");
}
return ret;
} }
#if defined(_WIN32) #if defined(_WIN32)

View File

@ -66,6 +66,30 @@ BOOST_AUTO_TEST_CASE(readFileAsString_symlink)
BOOST_TEST(readFileAsString(tempDir.path() / "symlink.txt") == "ABC\ndef\n"); BOOST_TEST(readFileAsString(tempDir.path() / "symlink.txt") == "ABC\ndef\n");
} }
BOOST_AUTO_TEST_CASE(readUntilEnd_no_ending_newline)
{
istringstream inputStream("ABC\ndef");
BOOST_TEST(readUntilEnd(inputStream) == "ABC\ndef");
}
BOOST_AUTO_TEST_CASE(readUntilEnd_with_ending_newline)
{
istringstream inputStream("ABC\ndef\n");
BOOST_TEST(readUntilEnd(inputStream) == "ABC\ndef\n");
}
BOOST_AUTO_TEST_CASE(readUntilEnd_cr_lf_newline)
{
istringstream inputStream("ABC\r\ndef");
BOOST_TEST(readUntilEnd(inputStream) == "ABC\r\ndef");
}
BOOST_AUTO_TEST_CASE(readUntilEnd_empty)
{
istringstream inputStream("");
BOOST_TEST(readUntilEnd(inputStream) == "");
}
BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END()
} // namespace solidity::util::test } // namespace solidity::util::test

View File

@ -153,7 +153,7 @@ BOOST_AUTO_TEST_CASE(cli_input)
{"a", "b", "c/d/e/"}, {"a", "b", "c/d/e/"},
}; };
map<string, string> expectedSources = { map<string, string> expectedSources = {
{"<stdin>", "\n"}, {"<stdin>", ""},
{(expectedDir1 / "input1.sol").generic_string(), ""}, {(expectedDir1 / "input1.sol").generic_string(), ""},
{(expectedDir2 / "input2.sol").generic_string(), ""}, {(expectedDir2 / "input2.sol").generic_string(), ""},
}; };
@ -854,7 +854,7 @@ BOOST_AUTO_TEST_CASE(cli_paths_to_source_unit_names_base_path_and_stdin)
expectedOptions.modelChecker.initialize = true; expectedOptions.modelChecker.initialize = true;
map<string, string> expectedSources = { map<string, string> expectedSources = {
{"<stdin>", "\n"}, {"<stdin>", ""},
}; };
FileReader::FileSystemPathSet expectedAllowedDirectories = {}; FileReader::FileSystemPathSet expectedAllowedDirectories = {};