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))