[FFmpeg-devel] [PATCH] cmdutils: remove the current working directory from the DLL search path on win32
Hendrik Leppkes
h.leppkes at gmail.com
Mon Aug 8 16:27:41 EEST 2016
---
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");
--
2.9.2.windows.1
More information about the ffmpeg-devel
mailing list