From 23f64cf5e7813900942c78e056bd16a5147a3041 Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Wed, 16 Dec 2009 09:04:40 +0000
Subject: [PATCH] fileRead: check result of fread

---
 ChangeLog    |  6 ++++++
 src/binary.c | 15 ++++++++-------
 src/file.c   | 22 ++++++++++++++++++++--
 3 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 3124514fe..1c749ecfb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-15  Uwe Schulzweida  <Uwe.Schulzweida@zmaw.de>
+
+	* fileRead: check result of fread
+	* binReadF77Block: check result of fileRead
+	* Version 1.4.1 released
+
 2009-12-11  Uwe Schulzweida  <Uwe.Schulzweida@zmaw.de>
 
 	* streamSync: check that vlist has variables to sync [report: Martin Schultz]
diff --git a/src/binary.c b/src/binary.c
index 6df811d58..65011dc71 100644
--- a/src/binary.c
+++ b/src/binary.c
@@ -67,14 +67,15 @@ UINT64 get_SUINT64(unsigned char *x)
 size_t binReadF77Block(int fileID, int byteswap)
 {
   unsigned char f77block[4];
-  size_t blocklen;
+  size_t blocklen = 0;
 
-  fileRead(fileID, f77block, 4);
-
-  if ( byteswap )
-    blocklen = get_SUINT32(f77block);
-  else
-    blocklen =  get_UINT32(f77block);
+  if ( fileRead(fileID, f77block, 4) == 4 )
+    {
+      if ( byteswap )
+	blocklen = get_SUINT32(f77block);
+      else
+	blocklen =  get_UINT32(f77block);
+    }
 
   return (blocklen);
 }
diff --git a/src/file.c b/src/file.c
index 027e0c94f..b78d1f1c8 100644
--- a/src/file.c
+++ b/src/file.c
@@ -1323,7 +1323,16 @@ size_t filePtrRead(void *vfileptr, void *ptr, size_t size)
       if ( fileptr->mode == 'r' && fileptr->type == FILE_TYPE_OPEN )
 	nread = file_read_from_buffer(fileptr, ptr, size);
       else
-	nread = fread(ptr, 1, size, fileptr->fp);
+	{
+	  nread = fread(ptr, 1, size, fileptr->fp);
+	  if ( nread != size )
+	    {
+	      if ( nread == 0 )
+		fileptr->flag |= FILE_EOF;
+	      else
+		fileptr->flag |= FILE_ERROR;
+	    }
+	}
 
       fileptr->position  += nread;
       fileptr->byteTrans += nread;
@@ -1349,7 +1358,16 @@ size_t fileRead(int fileID, void *ptr, size_t size)
       if ( fileptr->mode == 'r' && fileptr->type == FILE_TYPE_OPEN )
 	nread = file_read_from_buffer(fileptr, ptr, size);
       else
-	nread = fread(ptr, 1, size, fileptr->fp);
+	{
+	  nread = fread(ptr, 1, size, fileptr->fp);
+	  if ( nread != size )
+	    {
+	      if ( nread == 0 )
+		fileptr->flag |= FILE_EOF;
+	      else
+		fileptr->flag |= FILE_ERROR;
+	    }
+	}
 
       fileptr->position  += nread;
       fileptr->byteTrans += nread;
-- 
GitLab