chiark / gitweb /
Remove an inappropriate assertion in validation context.
authorSimon Tatham <anakin@pobox.com>
Wed, 26 Nov 2014 21:25:02 +0000 (21:25 +0000)
committerSimon Tatham <anakin@pobox.com>
Wed, 26 Nov 2014 21:25:02 +0000 (21:25 +0000)
spec_to_dsf() should not report invalid input by failing an assertion,
because one of the contexts it's called from is validate_desc(), in
which the whole point is to present a useful error message to the user
before getting to the point where an assertion might go off at all.

Game description 5j:c1_5o4_3c,c___aba___cca_a_a_aca now fails
validation cleanly, where previously it would trigger this bug.

solo.c

diff --git a/solo.c b/solo.c
index c7ed61be9a566ac52cc3bfe9d688b7f508ea102f..789d68fd86afeeb0bcbc1fb6e04d6a34d6328de8 100644 (file)
--- a/solo.c
+++ b/solo.c
@@ -3849,7 +3849,11 @@ static char *spec_to_dsf(const char **pdesc, int **pdsf, int cr, int area)
             * Non-edge; merge the two dsf classes on either
             * side of it.
             */
-           assert(pos < 2*cr*(cr-1));
+           if (pos >= 2*cr*(cr-1)) {
+                sfree(dsf);
+                return "Too much data in block structure specification";
+            }
+
            if (pos < cr*(cr-1)) {
                int y = pos/(cr-1);
                int x = pos%(cr-1);