[FFmpeg-cvslog] ffmpeg: block output == input for files
Gyan Doshi
git at videolan.org
Mon Sep 17 11:19:20 EEST 2018
ffmpeg | branch: master | Gyan Doshi <ffmpeg at gyani.pro> | Sun Aug 26 11:40:50 2018 +0530| [acc9684dcd3949741e944d611f5a2a62db0546e6] | committer: Gyan Doshi
ffmpeg: block output == input for files
Fixes #4655
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=acc9684dcd3949741e944d611f5a2a62db0546e6
---
fftools/ffmpeg_opt.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index 58ec13e5a8..c44ed63730 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -900,13 +900,14 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic)
static void assert_file_overwrite(const char *filename)
{
+ const char *proto_name = avio_find_protocol_name(filename);
+
if (file_overwrite && no_file_overwrite) {
fprintf(stderr, "Error, both -y and -n supplied. Exiting.\n");
exit_program(1);
}
if (!file_overwrite) {
- const char *proto_name = avio_find_protocol_name(filename);
if (proto_name && !strcmp(proto_name, "file") && avio_check(filename, 0) == 0) {
if (stdin_interaction && !no_file_overwrite) {
fprintf(stderr,"File '%s' already exists. Overwrite ? [y/N] ", filename);
@@ -925,6 +926,19 @@ static void assert_file_overwrite(const char *filename)
}
}
}
+
+ if (proto_name && !strcmp(proto_name, "file")) {
+ for (int i = 0; i < nb_input_files; i++) {
+ InputFile *file = input_files[i];
+ if (file->ctx->iformat->flags & AVFMT_NOFILE)
+ continue;
+ if (!strcmp(filename, file->ctx->url)) {
+ av_log(NULL, AV_LOG_FATAL, "Output %s same as Input #%d - exiting\n", filename, i);
+ av_log(NULL, AV_LOG_WARNING, "FFmpeg cannot edit existing files in-place.\n");
+ exit_program(1);
+ }
+ }
+ }
}
static void dump_attachment(AVStream *st, const char *filename)
More information about the ffmpeg-cvslog
mailing list