Fix crash of ICS caused by printing invalid seek ad
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 2 Sep 2012 16:30:46 +0000 (18:30 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Tue, 4 Sep 2012 09:17:21 +0000 (11:17 +0200)
A seek ad with invalid arguments obtained status SEEK_CLOSED before
processing it was aborted, with as result an uninitialized ad, which
would crash a later sought command.

lasker-2.2.3/src/seekproc.c

index 8a1b9f6..e072fd3 100644 (file)
@@ -65,7 +65,6 @@ int com_seek(int p, param_list param)
                pprintf(p, "ERROR: Sorry, all available slots for seek are closed.\n");
                return COM_OK;
        }
-       seek_globals.ads[num].status = SEEKCLOSED;
        seek_globals.ads[num].whofrom = p;
 
 #if 1
@@ -78,6 +77,9 @@ int com_seek(int p, param_list param)
                                                          board,param[0].val.string))
              return COM_OK; /* couldn't parse */
        }
+
+       seek_globals.ads[num].status = SEEKCLOSED; // params are valid; create ad
+
        if(wt < 0) wt = pp->d_time; if(bt < 0) bt = wt;
        if(winc < 0) winc = pp->d_inc; if(binc < 0) binc = bt;
        seek_globals.ads[num].wtime = wt;
@@ -100,6 +102,8 @@ int com_seek(int p, param_list param)
                seek_globals.ads[num].seek_color = random() % 2;
 
 #else
+       seek_globals.ads[num].status = SEEKCLOSED;
+
        if (param[0].type == TYPE_INT)
                seek_globals.ads[num].wtime = param[0].val.integer;     /* White time */
        else