]> www.fi.muni.cz Git - evince.git/commitdiff
check gnome_vfs_foo return values. Fixes crashes with gnome-vfs' http
authorMark McLoughlin <mark@skynet.ie>
Tue, 21 Sep 2004 16:11:26 +0000 (16:11 +0000)
committerMartin Kretzschmar <martink@src.gnome.org>
Tue, 21 Sep 2004 16:11:26 +0000 (16:11 +0000)
2004-09-20  Mark McLoughlin  <mark@skynet.ie>

* xpdf/GnomeVFSStream.cc (reset, fillBuf): check gnome_vfs_foo
return values.  Fixes crashes with gnome-vfs' http method.  Bug
#153159, #151364, Red Hat Bug #132469, half of Debian Bug #268873.

pdf/xpdf/GnomeVFSStream.cc

index 324e4088d8a573283edb77d81c1b1b75bc4cab80..4ff30a5f9616de4b0d967e170184923a7f52c475 100644 (file)
@@ -47,9 +47,10 @@ Stream *GnomeVFSStream::makeSubStream(Guint startA, GBool limitedA,
 
 void GnomeVFSStream::reset() {
   GnomeVFSFileSize offsetReturn;
-  gnome_vfs_tell(handle, &offsetReturn);
-  savePos = (Guint)offsetReturn;
-  saved = gTrue;
+  if (gnome_vfs_tell(handle, &offsetReturn) == GNOME_VFS_OK) {
+    savePos = (Guint)offsetReturn;
+    saved = gTrue;
+  }
   gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, start);
   bufPtr = bufEnd = buf;
   bufPos = start;
@@ -83,7 +84,9 @@ GBool GnomeVFSStream::fillBuf() {
   } else {
     n = gnomeVFSStreamBufSize;
   }
-  gnome_vfs_read(handle, buf, n, &bytesRead);
+  if (gnome_vfs_read(handle, buf, n, &bytesRead) != GNOME_VFS_OK) {
+    return gFalse;
+  }
   bufEnd = buf + bytesRead;
   if (bufPtr >= bufEnd) {
     return gFalse;
@@ -99,21 +102,22 @@ GBool GnomeVFSStream::fillBuf() {
 }
 
 void GnomeVFSStream::setPos(Guint pos, int dir) {
-  Guint size;
-
   if (dir >= 0) {
-    gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, pos);
-    bufPos = pos;
+    if (gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, pos) == GNOME_VFS_OK) {
+      bufPos = pos;
+    }
   } else {
     GnomeVFSFileSize offsetReturn;
-    gnome_vfs_seek(handle, GNOME_VFS_SEEK_END, 0);
-    gnome_vfs_tell(handle, &offsetReturn);
-    size = (Guint)offsetReturn;
-    if (pos > size)
-      pos = (Guint)size;
-    gnome_vfs_seek(handle, GNOME_VFS_SEEK_END, -(int)pos);
-    gnome_vfs_tell(handle, &offsetReturn);
-    bufPos = (Guint)offsetReturn;
+    if (gnome_vfs_seek(handle, GNOME_VFS_SEEK_END, 0) == GNOME_VFS_OK &&
+       gnome_vfs_tell(handle, &offsetReturn) == GNOME_VFS_OK) {
+      bufPos = (Guint)offsetReturn;
+      if (pos > bufPos)
+       pos = (Guint)bufPos;
+      if (gnome_vfs_seek(handle, GNOME_VFS_SEEK_END, -(int)pos) == GNOME_VFS_OK &&
+         gnome_vfs_tell(handle, &offsetReturn) == GNOME_VFS_OK) {
+       bufPos = (Guint)offsetReturn;
+      }
+    }
   }
   bufPtr = bufEnd = buf;
 }