patch 9.0.0810: readblob() returns empty when trying to read too much

Problem:    readblob() returns empty when trying to read too much.
Solution:   Return what is available.
diff --git a/src/blob.c b/src/blob.c
index a94316c..311b87e 100644
--- a/src/blob.c
+++ b/src/blob.c
@@ -199,24 +199,32 @@
 
     if (offset >= 0)
     {
-	if (size == -1)
+	// The size defaults to the whole file.  If a size is given it is
+	// limited to not go past the end of the file.
+	if (size == -1 || (size > st.st_size - offset
+#ifdef S_ISCHR
+		    && !S_ISCHR(st.st_mode)
+#endif
+		    ))
 	    // size may become negative, checked below
 	    size = st.st_size - offset;
 	whence = SEEK_SET;
     }
     else
     {
-	if (size == -1)
+	// limit the offset to not go before the start of the file
+	if (-offset > st.st_size
+#ifdef S_ISCHR
+		    && !S_ISCHR(st.st_mode)
+#endif
+		    )
+	    offset = -st.st_size;
+	// Size defaults to reading until the end of the file.
+	if (size == -1 || size > -offset)
 	    size = -offset;
 	whence = SEEK_END;
     }
-    // Trying to read bytes that aren't there results in an empty blob, not an
-    // error.
-    if (size <= 0 || (
-#ifdef S_ISCHR
-		!S_ISCHR(st.st_mode) &&
-#endif
-		size > st.st_size))
+    if (size <= 0)
 	return OK;
     if (offset != 0 && vim_fseek(fd, offset, whence) != 0)
 	return OK;