aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2016-08-08 15:27:41 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2016-08-15 20:25:13 +0200
commit65fff8e71ac92348c2bc8d4997aa5f732a5be321 (patch)
tree161b23b694c871119d322a6fbe68f50333907bd4
parent3988470ee3551f801e855d295ad9603fb9bd5757 (diff)
downloadffmpeg-65fff8e71ac92348c2bc8d4997aa5f732a5be321.tar.gz
cmdutils: remove the current working directory from the DLL search path on win32
Reviewed-by: Matt Oliver <protogonoi@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 3bf142c77337814458ed8e036796934032d9837f) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--cmdutils.c9
-rw-r--r--cmdutils.h5
-rw-r--r--ffmpeg.c2
-rw-r--r--ffplay.c2
-rw-r--r--ffprobe.c2
-rw-r--r--ffserver.c2
6 files changed, 22 insertions, 0 deletions
diff --git a/cmdutils.c b/cmdutils.c
index 3543edd0cb..bb4f49a7ba 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -106,6 +106,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 7f3db2af1a..e5ea45bfb0 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 602cbfa45d..2887e91d1a 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -4118,6 +4118,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 17327b036b..76d8fc8f2f 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -3684,6 +3684,8 @@ int main(int argc, char **argv)
VideoState *is;
char dummy_videodriver[] = "SDL_VIDEODRIVER=dummy";
+ init_dynload();
+
av_log_set_flags(AV_LOG_SKIP_REPEATED);
parse_loglevel(argc, argv, options);
diff --git a/ffprobe.c b/ffprobe.c
index 3e5324e36b..ed8babf784 100644
--- a/ffprobe.c
+++ b/ffprobe.c
@@ -3142,6 +3142,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 8b6e441513..822e729441 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -3817,6 +3817,8 @@ int main(int argc, char **argv)
struct sigaction sigact = { { 0 } };
int ret = 0;
+ init_dynload();
+
config.filename = av_strdup("/etc/ffserver.conf");
parse_loglevel(argc, argv, options);