From 62ecc832eebc50de61e84ca8022f260e75a8f1ba Mon Sep 17 00:00:00 2001 From: Buggem's Fedora PC <66670928+Buggem@users.noreply.github.com> Date: Sun, 26 Jan 2025 13:18:35 +1100 Subject: [PATCH] Patch out pointer control (new method sucks but ok I guess) --- desktop_version/src/main.cpp | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/desktop_version/src/main.cpp b/desktop_version/src/main.cpp index 684c17c518..c1b3986e40 100644 --- a/desktop_version/src/main.cpp +++ b/desktop_version/src/main.cpp @@ -73,8 +73,12 @@ static volatile Uint64 f_timePrev = 0; #endif // RPC variables -static const char* rpcArea = ""; -static const char* rpcRoomname = ""; + +#define RPC_SAFE_BUFFER 256 +// change to what you want if it suits other languages + +static char rpcArea[RPC_SAFE_BUFFER] = ""; +static char rpcRoomname[RPC_SAFE_BUFFER] = ""; static enum GameGamestate rpcGameState; @@ -992,41 +996,41 @@ static enum LoopCode loop_begin(void) rpcGameState = game.gamestate; if (rpcGameState == TITLEMODE) { - rpcArea = "Exploring the Menus"; - rpcRoomname = ""; + SDL_strlcpy(rpcArea, "Exploring the Menus", RPC_SAFE_BUFFER-1); + SDL_strlcpy(rpcRoomname, "", RPC_SAFE_BUFFER-1); } else if (rpcGameState == EDITORMODE) { - rpcArea = "Making a Level"; - rpcRoomname = ""; + SDL_strlcpy(rpcArea, "Making a Level", RPC_SAFE_BUFFER-1); + SDL_strlcpy(rpcRoomname, "", RPC_SAFE_BUFFER-1); } else { - rpcArea = map.currentarea(game.roomx, game.roomy); - rpcRoomname = map.roomname; + SDL_strlcpy(rpcArea, map.currentarea(game.roomx, game.roomy), RPC_SAFE_BUFFER-1); + SDL_strlcpy(rpcRoomname, map.roomname, RPC_SAFE_BUFFER-1); } NETWORK_setRPC(rpcArea, rpcRoomname); } else { - const char *nextArea, *nextRoom; + char nextArea[RPC_SAFE_BUFFER] = "", nextRoom[RPC_SAFE_BUFFER] = ""; // Dirty fix for custom levels getting the area from Dimension VVVVVV if (map.custommode) { - nextArea = game.customleveltitle.c_str(); + SDL_strlcpy(nextArea, game.customleveltitle.c_str(), RPC_SAFE_BUFFER-1); } else { - nextArea = map.currentarea(game.roomx, game.roomy); + SDL_strlcpy(nextArea, map.currentarea(game.roomx, game.roomy), RPC_SAFE_BUFFER-1); } - nextRoom = map.roomname; + SDL_strlcpy(nextRoom, map.roomname, RPC_SAFE_BUFFER-1); //printf("room %s == %s, area %s == %s\n", rpcRoomname, nextRoom, rpcArea, nextArea); if ((SDL_strcmp(rpcArea, nextArea) != 0) || (SDL_strcmp(rpcRoomname, nextRoom) != 0)) { // FIXME BEFORE PUSHING!!: These pointers aren't safe to use and result in RPC not updating when it needs to. - rpcArea = nextArea; - rpcRoomname = nextRoom; + SDL_strlcpy(rpcArea, nextArea, RPC_SAFE_BUFFER-1); + SDL_strlcpy(rpcRoomname, nextRoom, RPC_SAFE_BUFFER-1); NETWORK_setRPC(rpcArea, rpcRoomname); } }