I found a bug when in /var/monit event file is empty or corrupt

Attatch the fix

Bye

diff -ruN monit-4.10.1.old/event.c monit-4.10.1.old.basedir/event.c
--- monit-4.10.1.old/event.c	2007-07-29 22:23:26.000000000 +0200
+++ monit-4.10.1.old.basedir/event.c	2008-08-24 09:33:21.000000000 +0200
@@ -571,37 +571,41 @@
       }
 
       /* read event structure version */
-      if(!(version = File_readQueue(file, &size)) || size != sizeof(int)) {
-        LogError("skipping %s - unknown data format\n",
-          file_name, *version);
+      if(!(version = File_readQueue(file, &size))) {
+        LogError("skipping %s - unknown data format\n", file_name);
         goto error2;
       }
-      if(*version != EVENT_VERSION)
+      if(*version != EVENT_VERSION || size != sizeof(int))
       {
         LogError("Aborting event %s - incompatible data format version %d\n",
           file_name, *version);
-        goto error2;
+        goto error3;
       }
 
       /* read event structure */
-      if(!(e = File_readQueue(file, &size)) || size != sizeof(*e))
-        goto error2;
+      if(!(e = File_readQueue(file, &size)))
+        goto error3;
+
+      if(size != sizeof(*e))
+        goto error4;
 
       /* read source */
       if(!(e->source = File_readQueue(file, &size)))
-        goto error3;
+        goto error4;
 
       /* read group */
       if(!(e->group = File_readQueue(file, &size)))
-        goto error3;
+        goto error5;
 
       /* read message */
       if(!(e->message = File_readQueue(file, &size)))
-        goto error3;
+        goto error6;
 
       /* read event action */
-      if(!(action = File_readQueue(file, &size)) || size != sizeof(short))
-        goto error3;
+      if(!(action = File_readQueue(file, &size)))
+        goto error7;
+      if(size != sizeof(short))
+        goto error8;
       a->id = *action;
       if(e->state == STATE_FAILED)
       {
@@ -667,14 +671,19 @@
         unlink(file_name);
       }
 
-      error3:
-      FREE(e->source);
-      FREE(e->group);
+      error8:
+      FREE(action);
+      error7:
       FREE(e->message);
+      error6:
+      FREE(e->group);
+      error5:
+      FREE(e->source);
+      error4:
       FREE(e);
-      FREE(action);
-      error2:
+      error3:
       FREE(version);
+      error2:
       fclose(file);
     }
     error1:
_______________________________________________
monit-dev mailing list
monit-dev@nongnu.org
http://lists.nongnu.org/mailman/listinfo/monit-dev

Reply via email to