diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-26 21:48:10 +0000 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-26 22:47:28 +0000 |
| commit | 6ee62a43abe7d7e77226415b21d1cbf16dbda85a (patch) | |
| tree | 99b7f417cb462acee1d2a4ee9f42dd1a240ee8da /midend.c | |
| parent | e2d390aae872cee4cb16d746af3b2eeb7713cbf5 (diff) | |
| download | puzzles-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.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -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'; |