Another minor buglet

From: George (greerga@MIAVX1.ACS.MUOHIO.EDU)
Date: 07/13/97


void write_to_file(void *buf, int size, long filepos)
{
  FILE *mail_file;

  mail_file = fopen(MAIL_FILE, "r+b");

  if (filepos % BLOCK_SIZE) {
    log("SYSERR: Mail system -- fatal error #2!!!");
    no_mail = 1;
    return;
  }

If there does happen to be an invalid filepos % BLOCKSIZE then the opened
MAIL_FILE is not closed.  The function also does not check to make sure it
succeeded in opening the file.

diff -up ../stk/mail.c ./mail.c
--- ../stk/mail.c       Thu Jun 19 00:58:37 1997
+++ ./mail.c    Sun Jul 13 20:50:25 1997
@@ -90,13 +90,16 @@ void write_to_file(void *buf, int size,
 {
   FILE *mail_file;

-  mail_file = fopen(MAIL_FILE, "r+b");
-
   if (filepos % BLOCK_SIZE) {
     log("SYSERR: Mail system -- fatal error #2!!!");
     no_mail = 1;
     return;
   }
+  if (!(mail_file = fopen(MAIL_FILE, "r+b"))) {
+    log("SYSERR: Unable to open mail file.");
+    no_mail = 1;
+    return;
+  }
   fseek(mail_file, filepos, SEEK_SET);
   fwrite(buf, size, 1, mail_file);

@@ -112,13 +115,17 @@ void read_from_file(void *buf, int size,
 {
   FILE *mail_file;

-  mail_file = fopen(MAIL_FILE, "r+b");
-
   if (filepos % BLOCK_SIZE) {
     log("SYSERR: Mail system -- fatal error #3!!!");
     no_mail = 1;
     return;
   }
+  if (!(mail_file = fopen(MAIL_FILE, "r+b"))) {
+    log("SYSERR: Unable to open mail file.");
+    no_mail = 1;
+    return;
+  }
+
   fseek(mail_file, filepos, SEEK_SET);
   fread(buf, size, 1, mail_file);
   fclose(mail_file);

-George


      +-----------------------------------------------------------+
      | Ensure that you have read the CircleMUD Mailing List FAQ: |
      |   http://cspo.queensu.ca/~fletcher/Circle/list-faq.html   |
      +-----------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/08/00 PST