diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-14 13:16:53 +0000 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2023-04-08 20:08:16 +0100 |
| commit | 71cf891fdc3ab237ecf0e5d1aae39b6c9fe97a4d (patch) | |
| tree | 815e735ad2358533808c5949e767d52b059a7f90 /pattern.c | |
| parent | a4c6f21b8e286322d3c1820785907a000fe1092f (diff) | |
| download | puzzles-71cf891fdc3ab237ecf0e5d1aae39b6c9fe97a4d.zip puzzles-71cf891fdc3ab237ecf0e5d1aae39b6c9fe97a4d.tar.gz puzzles-71cf891fdc3ab237ecf0e5d1aae39b6c9fe97a4d.tar.bz2 puzzles-71cf891fdc3ab237ecf0e5d1aae39b6c9fe97a4d.tar.xz | |
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.
Diffstat (limited to 'pattern.c')
| -rw-r--r-- | pattern.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -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; |