Make XRef reconstruction a bit better

Also detect streams whose endstream is on the middle of a line and not only at the beginning

Bug #100509
diff --git a/poppler/XRef.cc b/poppler/XRef.cc
index 2add7dc..8d8fac4 100644
--- a/poppler/XRef.cc
+++ b/poppler/XRef.cc
@@ -1023,17 +1023,25 @@
 	  }
         }
 
-      } else if (!strncmp(p, "endstream", 9)) {
-        if (streamEndsLen == streamEndsSize) {
-	  streamEndsSize += 64;
-          if (streamEndsSize >= INT_MAX / (int)sizeof(int)) {
-            error(errSyntaxError, -1, "Invalid 'endstream' parameter.");
-            return gFalse;
-          }
-	  streamEnds = (Goffset *)greallocn(streamEnds,
-					streamEndsSize, sizeof(Goffset));
-        }
-        streamEnds[streamEndsLen++] = pos;
+      } else {
+	char *endstream = strstr( p, "endstream" );
+	if (endstream) {
+	  int endstreamPos = endstream - p;
+	  if ((endstreamPos == 0 || Lexer::isSpace(p[endstreamPos-1] & 0xff)) // endstream is either at beginning or preceeded by space
+	    && (endstreamPos + 9 >= 256 || Lexer::isSpace(p[endstreamPos+9] & 0xff))) // endstream is either at end or followed by space
+	  {
+	    if (streamEndsLen == streamEndsSize) {
+	      streamEndsSize += 64;
+	      if (streamEndsSize >= INT_MAX / (int)sizeof(int)) {
+		error(errSyntaxError, -1, "Invalid 'endstream' parameter.");
+		return gFalse;
+	      }
+	      streamEnds = (Goffset *)greallocn(streamEnds,
+					    streamEndsSize, sizeof(Goffset));
+	    }
+	    streamEnds[streamEndsLen++] = pos + endstreamPos;
+	  }
+	}
       }
       if( token ) {
         p = token + 6;// strlen( "endobj" ) = 6