[FFmpeg-devel] [PATCH] fix possible crash if vpre before vcodec
Reimar Döffinger
Reimar.Doeffinger
Fri Feb 27 11:25:26 CET 2009
Hello,
I recently tried the following command
ffmpeg -i baldursgate-logo.mve -vpre hq -vcodec libx264 -b 500k -an out.mp4
and wondered why it would not work.
strace showed the following:
open("/home/reimar/.ffmpeg/hq.ffpreset", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/home/reimar/.ffmpeg/(null)-hq.ffpreset", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/local/share/ffmpeg/hq.ffpreset", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/local/share/ffmpeg/(null)-hq.ffpreset", O_RDONLY) = -1 ENOENT (No such file or directory)
obviously ffmpeg tries to open the file already during option parsing (this could probably be considered
the real bug). When -vcodec is set only afterwards it passes NULL to
snprintf %s argument which may (and will) crash with some
implementations.
I propose a patch that at least avoids the crash, but e.g. this:
-vcodec blub -vpre hq -vcodec libx264
will still have the counter-intuitive behaviour of reading
blub-hq.ffpreset but encoding with libx264.
diff --git a/ffmpeg.c b/ffmpeg.c
index 1e31570..1ca0dd9 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -3708,12 +3708,12 @@ static int opt_preset(const char *opt, const char *arg)
};
for(i=!base[0]; i<2 && !f; i++){
+ char *codec_name= *opt == 'v' ? video_codec_name :
+ *opt == 'a' ? audio_codec_name :
+ subtitle_codec_name;
snprintf(filename, sizeof(filename), "%s%s/%s.ffpreset", base[i], i ? "" : "/.ffmpeg", arg);
f= fopen(filename, "r");
- if(!f){
- char *codec_name= *opt == 'v' ? video_codec_name :
- *opt == 'a' ? audio_codec_name :
- subtitle_codec_name;
+ if(!f && codec_name){
snprintf(filename, sizeof(filename), "%s%s/%s-%s.ffpreset", base[i], i ? "" : "/.ffmpeg", codec_name, arg);
f= fopen(filename, "r");
}
More information about the ffmpeg-devel
mailing list