shithub: puzzles

Download patch

ref: 896a73bd7ff8cbde44e97d89cef57346478f0072
parent: c0b2f0fc98e87392dcb4dd8faf3076786fc49367
author: Ben Harris <bjh21@bjh21.me.uk>
date: Sat Feb 11 17:00:49 EST 2023

Cleanly reject more ill-formed solve moves in Flood

The fix in e4112b3 was incomplete: there was another assertion that could be failed by a save file with an ill-formed solve move.  That now gets rejected properly.  Here's an example save file to demonstrate the problem:

SAVEFILE:41:Simon Tatham's Portable Puzzle Collection
GAME    :5:Flood
PARAMS  :7:6x6c6m0
CPARAMS :7:6x6c6m0
DESC    :39:000000000000000000000000000000000000,00
NSTATES :1:2
STATEPOS:1:2
MOVE    :1:S

--- a/flood.c
+++ b/flood.c
@@ -938,15 +938,16 @@
 
         sol->moves = snewn(sol->nmoves, char);
         for (i = 0, p = move; i < sol->nmoves; i++) {
-            assert(*p);
+            if (!*p) {
+              badsolve:
+                sfree(sol->moves);
+                sfree(sol);
+                return NULL;
+            };
             sol->moves[i] = atoi(p);
             p += strspn(p, "0123456789");
             if (*p) {
-                if (*p != ',') {
-                    sfree(sol->moves);
-                    sfree(sol);
-                    return NULL;
-                }
+                if (*p != ',') goto badsolve;
                 p++;
             }
         }