From: Christos Zoulas Date: Wed, 15 Apr 2026 16:53:39 +0000 Subject: PR/753: vmihalko: Fix race is magic_getpath() # Upstream-commit: fa66260f9a52dba5c3a64e7d69485d24af4cd369 # https://github.com/file/file/commit/fa66260f9a52dba5c3a64e7d69485d24af4cd369 diff --git a/src/magic.c b/src/magic.c index 89f4e16..74b77f1 100644 --- a/src/magic.c +++ b/src/magic.c @@ -72,7 +72,7 @@ FILE_RCSID("@(#)$File: magic.c,v 1.113 2020/12/08 21:26:00 christos Exp $") private void close_and_restore(const struct magic_set *, const char *, int, const struct stat *); private int unreadable_info(struct magic_set *, mode_t, const char *); -private const char* get_default_magic(void); +private const char *get_default_magic(void); #ifndef COMPILE_ONLY private const char *file_or_fd(struct magic_set *, const char *, int); #endif @@ -174,15 +174,11 @@ get_default_magic(void) { static const char hmagic[] = "/.magic/magic.mgc"; static char *default_magic; - char *home, *hmagicpath; + char *home, *hmagicpath, *tmp_magic; #ifndef WIN32 struct stat st; - if (default_magic) { - free(default_magic); - default_magic = NULL; - } if ((home = getenv("HOME")) == NULL) return MAGIC; @@ -203,9 +199,12 @@ get_default_magic(void) } } - if (asprintf(&default_magic, "%s:%s", hmagicpath, MAGIC) < 0) + if (asprintf(&tmp_magic, "%s:%s", hmagicpath, MAGIC) < 0) goto out; free(hmagicpath); + hmagicpath = default_magic; + default_magic = tmp_magic; + free(hmagicpath); return default_magic; out: default_magic = NULL; @@ -214,11 +213,6 @@ out: #else hmagicpath = NULL; - if (default_magic) { - free(default_magic); - default_magic = NULL; - } - /* First, try to get a magic file from user-application data */ if ((home = getenv("LOCALAPPDATA")) != NULL) _w32_append_path(&hmagicpath, "%s%s", home, hmagic); @@ -239,7 +233,9 @@ out: _w32_get_magic_relative_to(&hmagicpath, _w32_dll_instance); /* Avoid MAGIC constant - it likely points to a file within MSys tree */ + tmp_magic = default_magic; default_magic = hmagicpath; + free(tmp_magic); return default_magic; #endif } -- 2.53.0