ref: 71cf891fdc3ab237ecf0e5d1aae39b6c9fe97a4d
parent: a4c6f21b8e286322d3c1820785907a000fe1092f
author: Ben Harris <bjh21@bjh21.me.uk>
date: Tue Feb 14 08:16:53 EST 2023
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.
--- a/pattern.c
+++ b/pattern.c
@@ -917,8 +917,8 @@
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;