From f1b82ee04147b081a7be62223169c1d6bbdbae6d Mon Sep 17 00:00:00 2001 From: fogobogo Date: Fri, 21 Apr 2017 10:15:33 +0200 Subject: [PATCH] fix compilation without gperftools (#87) * fix compilation without gperftools the -ltcmalloc get pulled in by gperftools * fix buffer overflow This might not be the last one... * fix potential buffer overflow Some still remain because I'm unsure of their function. Just simple fixes for now. * fix even more potential overflows Those need testing. It seems a lot variables are hardcoded there but since it matches NAME_MAX it should be safe to use 255 as a value. --- Makefile | 3 ++- src/osdep/amiberry.cpp | 2 +- src/osdep/amiberry_gui.cpp | 8 ++++---- src/osdep/gui/PanelConfig.cpp | 6 +++--- src/osdep/gui/PanelFloppy.cpp | 10 +++++----- src/osdep/menu/menu_config.cpp | 2 +- 6 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index 69a1d02f..ad83a91c 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ MORE_CFLAGS += -Isrc -Isrc/osdep -Isrc/threaddep -Isrc/include -Isrc/guisan/incl MORE_CFLAGS += -Wno-unused -Wno-format -DGCCCONSTFUNC="__attribute__((const))" MORE_CFLAGS += -fexceptions -fpermissive -LDFLAGS += -lpthread -lm -lz -lpng -lrt -lxml2 -lFLAC -lmpg123 -ldl +LDFLAGS += -lpthread -lm -lz -lpng -lrt -lxml2 -lFLAC -lmpg123 -ldl LDFLAGS += -lSDL2 -lSDL2_image -lSDL2_ttf -lguisan -L/opt/vc/lib -Lsrc/guisan/lib ifndef DEBUG @@ -48,6 +48,7 @@ else MORE_CFLAGS += -g -DDEBUG -Wl,--export-dynamic MORE_CFLAGS += -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free LDFLAGS += -ltcmalloc -lprofiler + endif ASFLAGS += $(CPU_FLAGS) diff --git a/src/osdep/amiberry.cpp b/src/osdep/amiberry.cpp index ca1dd1de..d755e78e 100644 --- a/src/osdep/amiberry.cpp +++ b/src/osdep/amiberry.cpp @@ -702,7 +702,7 @@ int main(int argc, char* argv[]) loadAdfDir(); rp9_init(); - snprintf(savestate_fname, MAX_PATH, "%s/saves/default.ads", start_path_data); + snprintf(savestate_fname, MAX_DPATH, "%s/saves/default.ads", start_path_data); logging_init(); memset(&action, 0, sizeof(action)); diff --git a/src/osdep/amiberry_gui.cpp b/src/osdep/amiberry_gui.cpp index f414cd92..6d56821a 100644 --- a/src/osdep/amiberry_gui.cpp +++ b/src/osdep/amiberry_gui.cpp @@ -282,8 +282,8 @@ void RescanROMs() for (int i = 0; i < files.size(); ++i) { char tmppath[MAX_PATH]; - strncpy(tmppath, path, MAX_PATH); - strncat(tmppath, files[i].c_str(), MAX_PATH); + strncpy(tmppath, path, MAX_DPATH); + strncat(tmppath, files[i].c_str(), MAX_DPATH); scan_rom(tmppath); } @@ -510,7 +510,7 @@ void gui_purge_events() int gui_update() { - char tmp[MAX_PATH]; + char tmp[MAX_DPATH]; fetch_statefilepath(savestate_fname, MAX_DPATH); fetch_screenshotpath(screenshot_filename, MAX_DPATH); @@ -518,7 +518,7 @@ int gui_update() if (strlen(currprefs.floppyslots[0].df) > 0) extractFileName(currprefs.floppyslots[0].df, tmp); else - strncpy(tmp, last_loaded_config, MAX_PATH); + strncpy(tmp, last_loaded_config, MAX_DPATH); strncat(savestate_fname, tmp, MAX_DPATH); strncat(screenshot_filename, tmp, MAX_DPATH); diff --git a/src/osdep/gui/PanelConfig.cpp b/src/osdep/gui/PanelConfig.cpp index 2474243e..244a804c 100644 --- a/src/osdep/gui/PanelConfig.cpp +++ b/src/osdep/gui/PanelConfig.cpp @@ -103,7 +103,7 @@ public: if (strlen(ConfigFilesList[i]->Description) > 0) { strncat(tmp, " (", MAX_DPATH); - strncat(tmp, ConfigFilesList[i]->Description, MAX_DPATH); + strncat(tmp, ConfigFilesList[i]->Description, 255); strncat(tmp, ")", MAX_DPATH); } configs.push_back(tmp); @@ -151,9 +151,9 @@ public: if (!txtName->getText().empty()) { fetch_configurationpath(filename, MAX_DPATH); - strncat(filename, txtName->getText().c_str(), MAX_DPATH); + strncat(filename, txtName->getText().c_str(), 255); strncat(filename, ".uae", MAX_DPATH); - strncpy(changed_prefs.description, txtDesc->getText().c_str(), 256); + strncpy(changed_prefs.description, txtDesc->getText().c_str(), 255); if (cfgfile_save(&changed_prefs, filename, 0)) RefreshPanelConfig(); } diff --git a/src/osdep/gui/PanelFloppy.cpp b/src/osdep/gui/PanelFloppy.cpp index be6b7cfb..d6a34f98 100644 --- a/src/osdep/gui/PanelFloppy.cpp +++ b/src/osdep/gui/PanelFloppy.cpp @@ -289,17 +289,17 @@ public: //--------------------------------------- if (strlen(changed_prefs.floppyslots[0].df) > 0) { - char filename[MAX_DPATH]; - char diskname[MAX_PATH]; + char filename[MAX_PATH]; + char diskname[MAX_DPATH]; extractFileName(changed_prefs.floppyslots[0].df, diskname); removeFileExtension(diskname); - fetch_configurationpath(filename, MAX_DPATH); + fetch_configurationpath(filename, MAX_PATH); strncat(filename, diskname, MAX_DPATH); - strncat(filename, ".uae", MAX_DPATH); + strncat(filename, ".uae", MAX_PATH); - snprintf(changed_prefs.description, MAX_PATH, "Configuration for disk '%s'", diskname); + snprintf(changed_prefs.description, 255, "Configuration for disk '%s'", diskname); if (cfgfile_save(&changed_prefs, filename, 0)) RefreshPanelConfig(); } diff --git a/src/osdep/menu/menu_config.cpp b/src/osdep/menu/menu_config.cpp index fc807801..f3ea02be 100644 --- a/src/osdep/menu/menu_config.cpp +++ b/src/osdep/menu/menu_config.cpp @@ -72,7 +72,7 @@ static bool CheckKickstart(struct uae_prefs* p) // Search via filename fetch_rompath(kickpath, MAX_DPATH); - strncat(kickpath, kickstarts_rom_names[kickstart], MAX_DPATH); + strncat(kickpath, kickstarts_rom_names[kickstart], 255); for (i = 0; i < lstAvailableROMs.size(); ++i) { if (!strcasecmp(lstAvailableROMs[i]->Path, kickpath))