shithub: puzzles

Download patch

ref: 078d3c0a6d6ace0f524dea0c3e03d5fa9ba361c0
parent: d7a4c52937ddacc5c81049f0bfdf916df757277c
author: Simon Tatham <anakin@pobox.com>
date: Wed Nov 26 16:25:02 EST 2014

Remove an inappropriate assertion in validation context.

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.

--- a/solo.c
+++ b/solo.c
@@ -3849,7 +3849,11 @@
 	     * 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);