diff urogue/daemon.c @ 289:d815c40c3753

UltraRogue: add a sanity check to do_fuses(). The d_id field, which indicates which fuse function to call, is now checked to make sure it is not out of range. do_daemons() already checks.
author John "Elwin" Edwards
date Fri, 24 Nov 2017 16:22:10 -0500
parents c495a4f288c6
children
line wrap: on
line diff
--- a/urogue/daemon.c	Fri Nov 24 13:22:26 2017 -0500
+++ b/urogue/daemon.c	Fri Nov 24 16:22:10 2017 -0500
@@ -282,11 +282,18 @@
         {
             if (--wire->d_time <= 0)
             {
-                fuse_arg arg;
+                if (wire->d_id < 0 || wire->d_id >= FUSE_MAX)
+                    printf("Bad fuse id %d\n", wire->d_id);
+                else if (fuses[wire->d_id].func == NULL)
+                    printf("No action for fuse %d!\n", wire->d_id);
+                else
+                {
+                    fuse_arg arg;
 
-                arg.varg = wire->d_arg;
+                    arg.varg = wire->d_arg;
+                    fuses[wire->d_id].func(&arg);
+                }
                 wire->d_type = EMPTY;
-                fuses[wire->d_id].func(&arg);
                 demoncnt -= 1;
             }
         }