aboutsummaryrefslogtreecommitdiff
path: root/midend.c
diff options
context:
space:
mode:
authorBen Harris <bjh21@bjh21.me.uk>2023-02-26 21:48:10 +0000
committerBen Harris <bjh21@bjh21.me.uk>2023-02-26 22:47:28 +0000
commit6ee62a43abe7d7e77226415b21d1cbf16dbda85a (patch)
tree99b7f417cb462acee1d2a4ee9f42dd1a240ee8da /midend.c
parente2d390aae872cee4cb16d746af3b2eeb7713cbf5 (diff)
downloadpuzzles-6ee62a43abe7d7e77226415b21d1cbf16dbda85a.zip
puzzles-6ee62a43abe7d7e77226415b21d1cbf16dbda85a.tar.gz
puzzles-6ee62a43abe7d7e77226415b21d1cbf16dbda85a.tar.bz2
puzzles-6ee62a43abe7d7e77226415b21d1cbf16dbda85a.tar.xz
Correctly handle some short save files
A save file that ended in the middle of a value before the "SAVEFILE" field had been loaded would cause a read from uninitialised memory. While technically undefined behaviour this was practically pretty harmless. Fixed by handling unexpected EOF here the same an unexpected EOF anywhere else. This bug could be demonstrated by loading a truncated save file like this in a build with MemorySanitizer enabled: SAVEFILE:41:Simo
Diffstat (limited to 'midend.c')
-rw-r--r--midend.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/midend.c b/midend.c
index 2365258..90bcde2 100644
--- a/midend.c
+++ b/midend.c
@@ -2340,7 +2340,7 @@ static const char *midend_deserialise_internal(
val = snewn(len+1, char);
if (!read(rctx, val, len)) {
- if (started)
+ /* unexpected EOF */
goto cleanup;
}
val[len] = '\0';
@@ -2747,7 +2747,7 @@ const char *identify_game(char **name,
val = snewn(len+1, char);
if (!read(rctx, val, len)) {
- if (started)
+ /* unexpected EOF */
goto cleanup;
}
val[len] = '\0';