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.
This commit is contained in:
Ben Harris
2023-02-14 13:16:53 +00:00
parent a4c6f21b8e
commit 71cf891fdc

View File

@ -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;