From c5ee3d965c8a324b926789edfee21ada1ef30391 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 11 Jul 2007 22:11:29 +0000 Subject: [PATCH] Fixed crash on zero-byte read/write (thanks, Ensiform!). --- CHANGELOG.txt | 1 + physfs.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 3ac5f2e..7582eaa 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -2,6 +2,7 @@ * CHANGELOG. */ +07112007 - Fixed crash on zero-byte read/write (thanks, Ensiform!). 05272007 - FIXME removal: Replaced a strncpy() with a memcpy(). 05112007 - Minor documentation correction. 05052007 - Fixed zip archiver: could do bogus seek if a small, non-zip file diff --git a/physfs.c b/physfs.c index aeb0fc4..36edf8f 100644 --- a/physfs.c +++ b/physfs.c @@ -1978,6 +1978,8 @@ PHYSFS_sint64 PHYSFS_read(PHYSFS_File *handle, void *buffer, FileHandle *fh = (FileHandle *) handle; BAIL_IF_MACRO(!fh->forReading, ERR_FILE_ALREADY_OPEN_W, -1); + BAIL_IF_MACRO(objSize == 0, NULL, 0); + BAIL_IF_MACRO(objCount == 0, NULL, 0); if (fh->buffer != NULL) return(doBufferedRead(fh, buffer, objSize, objCount)); @@ -2011,6 +2013,8 @@ PHYSFS_sint64 PHYSFS_write(PHYSFS_File *handle, const void *buffer, FileHandle *fh = (FileHandle *) handle; BAIL_IF_MACRO(fh->forReading, ERR_FILE_ALREADY_OPEN_R, -1); + BAIL_IF_MACRO(objSize == 0, NULL, 0); + BAIL_IF_MACRO(objCount == 0, NULL, 0); if (fh->buffer != NULL) return(doBufferedWrite(handle, buffer, objSize, objCount));