Skip to content

Commit

Permalink
Fixes GetClipboardText() memory leak for PLATFORM_DESKTOP_SDL (#4354)
Browse files Browse the repository at this point in the history
  • Loading branch information
asdqwe authored Oct 2, 2024
1 parent 282d647 commit d9c10ed
Showing 1 changed file with 23 additions and 4 deletions.
27 changes: 23 additions & 4 deletions src/platforms/rcore_desktop_sdl.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@
#include "SDL_opengl.h" // SDL OpenGL functionality (if required, instead of internal renderer)
#endif

//----------------------------------------------------------------------------------
// Defines and Macros
//----------------------------------------------------------------------------------
#ifndef MAX_CLIPBOARD_BUFFER_LENGTH
#define MAX_CLIPBOARD_BUFFER_LENGTH 1024 // Size of the clipboard buffer used on GetClipboardText()
#endif

//----------------------------------------------------------------------------------
// Types and Structures Definition
//----------------------------------------------------------------------------------
Expand Down Expand Up @@ -852,10 +859,22 @@ void SetClipboardText(const char *text)
}

// Get clipboard text content
// NOTE: returned string must be freed with SDL_free()
const char *GetClipboardText(void)
{
return SDL_GetClipboardText();
static char buffer[MAX_CLIPBOARD_BUFFER_LENGTH] = { 0 };

char *clipboard = SDL_GetClipboardText();

int clipboardSize = snprintf(buffer, sizeof(buffer), "%s", clipboard);
if (clipboardSize >= MAX_CLIPBOARD_BUFFER_LENGTH)
{
char *truncate = buffer + MAX_CLIPBOARD_BUFFER_LENGTH - 4;
sprintf(truncate, "...");
}

SDL_free(clipboard);

return buffer;
}

// Show mouse cursor
Expand Down Expand Up @@ -1589,8 +1608,8 @@ int InitPlatform(void)
// Initialize storage system
//----------------------------------------------------------------------------
// Define base path for storage
CORE.Storage.basePath = SDL_GetBasePath(); // Alternative: GetWorkingDirectory();
CHDIR(CORE.Storage.basePath);
CORE.Storage.basePath = SDL_GetBasePath(); // Alternative: GetWorkingDirectory();
CHDIR(CORE.Storage.basePath);
//----------------------------------------------------------------------------

TRACELOG(LOG_INFO, "PLATFORM: DESKTOP (SDL): Initialized successfully");
Expand Down

0 comments on commit d9c10ed

Please sign in to comment.