diff --git a/SystemTools.cxx b/SystemTools.cxx index 3c19018633341100f4ddf51ee77f86323c53eca7..a6dee1b336f090dae0f803e0e11ebc2bea402681 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -3960,10 +3960,22 @@ bool SystemTools::GetLineFromStream(kwsys_ios::istream& is, long leftToRead = sizeLimit; + // Early short circuit return if stream is no good. Just return + // false and the empty line. (Probably means caller tried to + // create a file stream with a non-existent file name...) + // + if(!is) + { + if(has_newline) + { + *has_newline = false; + } + return false; + } + // If no characters are read from the stream, the end of file has // been reached. Clear the fail bit just before reading. - while(is && - !haveNewline && + while(!haveNewline && leftToRead != 0 && (is.clear(is.rdstate() & ~kwsys_ios::ios::failbit), is.getline(buffer, bufferSize), is.gcount() > 0))