summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2020-02-25 22:41:09 +0100
committerwm4 <wm4@nowhere>2020-02-25 22:41:09 +0100
commitc43fd88f5997821251bdeeca9700fa18c42049df (patch)
tree92979b07129f94ad8d07f92f6b242df7f4e0807d
parent322eb726799fd606747fc61035f00de07a522298 (diff)
downloadmpv-c43fd88f5997821251bdeeca9700fa18c42049df.tar.bz2
mpv-c43fd88f5997821251bdeeca9700fa18c42049df.tar.xz
scripting: fix racy crash if loading .run files fails
args->client was deallocated if the FDs were closed and nothing referenced it (IPC socket codes detected the closed sockets and asynchronously killed the mpv_handle in args->client). The problem was that args->log depended on it, and was also destroyed. Fix this by duplicating the mp_log.
-rw-r--r--player/scripting.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/player/scripting.c b/player/scripting.c
index c42706a0b9..81623cb518 100644
--- a/player/scripting.c
+++ b/player/scripting.c
@@ -328,6 +328,9 @@ const struct mp_scripting mp_scripting_cplugin = {
static int load_run(struct mp_script_args *args)
{
+ // The arg->client object might die and with it args->log, so duplicate it.
+ args->log = mp_log_new(args, args->log, NULL);
+
int fds[2];
if (!mp_ipc_start_anon_client(args->mpctx->ipc_ctx, args->client, fds))
return -1;