Skip to content

Commit

Permalink
dynapi: Don't use SDL_getenv; it might malloc before the app sets an …
Browse files Browse the repository at this point in the history
…allocator.

Use platform-specific code instead, so SDL's allocator never comes into play.

(cherry picked from commit d2693d4)
  • Loading branch information
icculus authored and sezero committed Feb 10, 2025
1 parent d60a0e5 commit bd1d5b5
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/dynapi/SDL_dynapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,16 @@ extern SDL_NORETURN void SDL_ExitProcess(int exitcode);
static void
SDL_InitDynamicAPILocked(void)
{
const char *libname = SDL_getenv_REAL("SDL_DYNAMIC_API");
/* this can't use SDL_getenv_REAL, because it might allocate memory before the app can set their allocator */
#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
/* We've always used LoadLibraryA for this, so this has never worked with Unicode paths on Windows. Sorry. */
char envbuf[512]; /* overflows will just report as environment variable being unset, but LoadLibraryA has a MAX_PATH of 260 anyhow, apparently. */
const DWORD rc = GetEnvironmentVariableA("SDL_DYNAMIC_API", envbuf, (DWORD) sizeof (envbuf));
char *libname = ((rc != 0) && (rc < sizeof (envbuf))) ? envbuf : NULL;
#else
const char *libname = getenv("SDL_DYNAMIC_API");
#endif

SDL_DYNAPI_ENTRYFN entry = NULL; /* funcs from here by default. */
SDL_bool use_internal = SDL_TRUE;

Expand Down

0 comments on commit bd1d5b5

Please sign in to comment.