[FFmpeg-devel] [PATCH] cmdutils: remove the current working directory from the DLL search path on win32
Matt Oliver
protogonoi at gmail.com
Mon Aug 8 17:25:21 EEST 2016
On 8 August 2016 at 23:27, Hendrik Leppkes <h.leppkes at gmail.com> wrote:
> ---
> cmdutils.c | 9 +++++++++
> cmdutils.h | 5 +++++
> ffmpeg.c | 2 ++
> ffplay.c | 2 ++
> ffprobe.c | 2 ++
> ffserver.c | 1 +
> 6 files changed, 21 insertions(+)
>
> diff --git a/cmdutils.c b/cmdutils.c
> index 03a4836..6960f8c 100644
> --- a/cmdutils.c
> +++ b/cmdutils.c
> @@ -107,6 +107,15 @@ static void log_callback_report(void *ptr, int level,
> const char *fmt, va_list v
> }
> }
>
> +void init_dynload(void)
> +{
> +#ifdef _WIN32
> + /* Calling SetDllDirectory with the empty string (but not NULL)
> removes the
> + * current working directory from the DLL search path as a security
> pre-caution. */
> + SetDllDirectory("");
> +#endif
> +}
> +
> static void (*program_exit)(int ret);
>
> void register_exit(void (*cb)(int ret))
> diff --git a/cmdutils.h b/cmdutils.h
> index 83ea4ad..67bf484 100644
> --- a/cmdutils.h
> +++ b/cmdutils.h
> @@ -62,6 +62,11 @@ void register_exit(void (*cb)(int ret));
> void exit_program(int ret) av_noreturn;
>
> /**
> + * Initialize dynamic library loading
> + */
> +void init_dynload(void);
> +
> +/**
> * Initialize the cmdutils option system, in particular
> * allocate the *_opts contexts.
> */
> diff --git a/ffmpeg.c b/ffmpeg.c
> index d6282bd..bae515d 100644
> --- a/ffmpeg.c
> +++ b/ffmpeg.c
> @@ -4293,6 +4293,8 @@ int main(int argc, char **argv)
> int ret;
> int64_t ti;
>
> + init_dynload();
> +
> register_exit(ffmpeg_cleanup);
>
> setvbuf(stderr,NULL,_IONBF,0); /* win32 runtime needs this */
> diff --git a/ffplay.c b/ffplay.c
> index 651e0cf..adbe9cb 100644
> --- a/ffplay.c
> +++ b/ffplay.c
> @@ -3776,6 +3776,8 @@ int main(int argc, char **argv)
> char dummy_videodriver[] = "SDL_VIDEODRIVER=dummy";
> char alsa_bufsize[] = "SDL_AUDIO_ALSA_SET_BUFFER_SIZE=1";
>
> + init_dynload();
> +
> av_log_set_flags(AV_LOG_SKIP_REPEATED);
> parse_loglevel(argc, argv, options);
>
> diff --git a/ffprobe.c b/ffprobe.c
> index a49be6a..657867d 100644
> --- a/ffprobe.c
> +++ b/ffprobe.c
> @@ -3241,6 +3241,8 @@ int main(int argc, char **argv)
> char *w_name = NULL, *w_args = NULL;
> int ret, i;
>
> + init_dynload();
> +
> av_log_set_flags(AV_LOG_SKIP_REPEATED);
> register_exit(ffprobe_cleanup);
>
> diff --git a/ffserver.c b/ffserver.c
> index 1a27583..453d790 100644
> --- a/ffserver.c
> +++ b/ffserver.c
> @@ -3980,6 +3980,7 @@ int main(int argc, char **argv)
> int cfg_parsed;
> int ret = EXIT_FAILURE;
>
> + init_dynload();
>
> config.filename = av_strdup("/etc/ffserver.conf");
>
> --
>
LGTM
More information about the ffmpeg-devel
mailing list