🐛 parsing erroneous files yields an exception (#366)

pull/355/head
Niels Lohmann 2016-11-23 16:57:01 +01:00
parent ed611119d9
commit 4bb41d065b
3 changed files with 18 additions and 0 deletions

View File

@ -7597,6 +7597,12 @@ class basic_json
explicit lexer(std::istream& s) explicit lexer(std::istream& s)
: m_stream(&s), m_line_buffer() : m_stream(&s), m_line_buffer()
{ {
// immediately abort if stream is erroneous
if (s.fail())
{
throw std::invalid_argument("stream error: " + std::string(strerror(errno)));
}
// fill buffer // fill buffer
fill_line_buffer(); fill_line_buffer();

View File

@ -7597,6 +7597,12 @@ class basic_json
explicit lexer(std::istream& s) explicit lexer(std::istream& s)
: m_stream(&s), m_line_buffer() : m_stream(&s), m_line_buffer()
{ {
// immediately abort if stream is erroneous
if (s.fail())
{
throw std::invalid_argument("stream error: " + std::string(strerror(errno)));
}
// fill buffer // fill buffer
fill_line_buffer(); fill_line_buffer();

View File

@ -495,4 +495,10 @@ TEST_CASE("regression tests")
json j = json::parse("22e2222"); json j = json::parse("22e2222");
CHECK(j == json()); CHECK(j == json());
} }
SECTION("issue #366 - json::parse on failed stream gets stuck")
{
std::ifstream f("file_not_found.json");
CHECK_THROWS_AS(json::parse(f), std::invalid_argument);
}
} }