diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2022-10-16 19:14:24 +0100 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2022-10-16 19:15:40 +0100 |
| commit | 1bab1d1d2ab472bb8fc7cddfce1d3c37e63a2ed5 (patch) | |
| tree | 161c0679f2b9ebb3082978eeca0401e058dcf708 /midend.c | |
| parent | 02e5e93046d1ee2ce7acde629a6562db9b36fa5d (diff) | |
| download | puzzles-1bab1d1d2ab472bb8fc7cddfce1d3c37e63a2ed5.zip puzzles-1bab1d1d2ab472bb8fc7cddfce1d3c37e63a2ed5.tar.gz puzzles-1bab1d1d2ab472bb8fc7cddfce1d3c37e63a2ed5.tar.bz2 puzzles-1bab1d1d2ab472bb8fc7cddfce1d3c37e63a2ed5.tar.xz | |
Correct and enable the range check on statepos when loading
statepos == 0 shouldn't ever occur in a save file because it indicates
an uninitialised midend. OTOH statepos == nstates is normal. Also
added an equivalent assertion when saving because Simon and I spent
some time discussing whether it could happen.
Diffstat (limited to 'midend.c')
| -rw-r--r-- | midend.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -2091,6 +2091,7 @@ void midend_serialise(midend *me, char buf[80]; sprintf(buf, "%d", me->nstates); wr("NSTATES", buf); + assert(me->statepos >= 1 && me->statepos <= me->nstates); sprintf(buf, "%d", me->statepos); wr("STATEPOS", buf); } @@ -2345,8 +2346,9 @@ static const char *midend_deserialise_internal( ret = "Game private description in save file is invalid"; goto cleanup; } - if (data.statepos < 0 || data.statepos >= data.nstates) { + if (data.statepos < 1 || data.statepos > data.nstates) { ret = "Game position in save file is out of range"; + goto cleanup; } if (!data.states) { |