diff options
author | wm4 <wm4@nowhere> | 2020-02-25 22:41:09 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2020-02-25 22:41:09 +0100 |
commit | c43fd88f5997821251bdeeca9700fa18c42049df (patch) | |
tree | 92979b07129f94ad8d07f92f6b242df7f4e0807d | |
parent | 322eb726799fd606747fc61035f00de07a522298 (diff) | |
download | mpv-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.c | 3 |
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; |