From 078d3c0a6d6ace0f524dea0c3e03d5fa9ba361c0 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Wed, 26 Nov 2014 21:25:02 +0000 Subject: [PATCH] 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. --- solo.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/solo.c b/solo.c index c7ed61b..789d68f 100644 --- 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);