From 71cf891fdc3ab237ecf0e5d1aae39b6c9fe97a4d Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Tue, 14 Feb 2023 13:16:53 +0000 Subject: [PATCH] Don't allow zero clues in Pattern Some nonogram implementations allow zero clues so that a row or column with a single zero clue is equivalent to one with no clues, that is it has no black squares in it. Pattern, however, doesn't interpret them like this and treats a puzzle with a zero clue as insoluble, so it's not helpful to permit them. Permitting zero clues also confuses Pattern's memory allocation so that it can suffer a buffer overrun. As an example, before this commit a build with AddressSanitizer would report a buffer overrun with the description "1:0/0.0" because it tries to put two clues in a row that can have a maximum of one. --- pattern.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pattern.c b/pattern.c index 4fd6753..4602585 100644 --- a/pattern.c +++ b/pattern.c @@ -917,8 +917,8 @@ static const char *validate_desc(const game_params *params, const char *desc) p = desc; while (*desc && isdigit((unsigned char)*desc)) desc++; n = atoi(p); - if (n < 0) - return "at least one clue is negative"; + if (n <= 0) + return "all clues must be positive"; if (n > INT_MAX - 1) return "at least one clue is grossly excessive"; rowspace -= n+1;