From d9d79d3c9ffa4ee097b53f62b8f2a457d679f805 Mon Sep 17 00:00:00 2001 From: Kp Date: Mon, 25 Nov 2013 00:20:18 +0000 Subject: [PATCH] Fix buffer overrun on malformed old levels --- similar/main/gamesave.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/similar/main/gamesave.cpp b/similar/main/gamesave.cpp index 8d686e0e8..bec0885c4 100644 --- a/similar/main/gamesave.cpp +++ b/similar/main/gamesave.cpp @@ -837,7 +837,18 @@ static int load_game_data(PHYSFS_file *LoadFile) // read null-terminated string char *p=Current_level_name; //must do read one char at a time, since no PHYSFSX_fgets() - do *p = PHYSFSX_fgetc(LoadFile); while (*p++!=0); + for (;;) { + *p = PHYSFSX_fgetc(LoadFile); + if (!*p) + break; + if (++p == Current_level_name + (sizeof(Current_level_name) / sizeof(Current_level_name[0]))) + { + p[-1] = 0; + while (PHYSFSX_fgetc(LoadFile)) + ; + break; + } + } } else Current_level_name[0]=0;