diff options
author | Mark McLoughlin <mark@skynet.ie> | 2004-09-21 16:11:26 (GMT) |
---|---|---|
committer | Martin Kretzschmar <martink@src.gnome.org> | 2004-09-21 16:11:26 (GMT) |
commit | 01ea7350f8728781e60850fad9c87e04bf219bf0 (patch) | |
tree | a3e7dc82e477b0dcdd80822e95cdf24311edfdca /pdf/xpdf/GnomeVFSStream.cc | |
parent | 3318b01eed1dbe76201682b34da16d9e02d998d5 (diff) |
check gnome_vfs_foo return values. Fixes crashes with gnome-vfs' http
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.
Diffstat (limited to 'pdf/xpdf/GnomeVFSStream.cc')
-rw-r--r-- | pdf/xpdf/GnomeVFSStream.cc | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/pdf/xpdf/GnomeVFSStream.cc b/pdf/xpdf/GnomeVFSStream.cc index 324e408..4ff30a5 100644 --- a/pdf/xpdf/GnomeVFSStream.cc +++ b/pdf/xpdf/GnomeVFSStream.cc @@ -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; } |