mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
fftools/ffmpeg_mux_init: avoid invalid memory access in set_dispositions()
This function assumes AVMEDIA_* are always positive, while in fact it can also handle AVMEDIA_TYPE_UNKNOWN, which is -1.
This commit is contained in:
parent
3a89e6d352
commit
c4b074676a
@ -2285,8 +2285,9 @@ static int set_dispositions(Muxer *mux, const OptionsContext *o)
|
||||
OutputFile *of = &mux->of;
|
||||
AVFormatContext *ctx = mux->fc;
|
||||
|
||||
int nb_streams[AVMEDIA_TYPE_NB] = { 0 };
|
||||
int have_default[AVMEDIA_TYPE_NB] = { 0 };
|
||||
// indexed by type+1, because AVMEDIA_TYPE_UNKNOWN=-1
|
||||
int nb_streams[AVMEDIA_TYPE_NB + 1] = { 0 };
|
||||
int have_default[AVMEDIA_TYPE_NB + 1] = { 0 };
|
||||
int have_manual = 0;
|
||||
int ret = 0;
|
||||
|
||||
@ -2300,7 +2301,7 @@ static int set_dispositions(Muxer *mux, const OptionsContext *o)
|
||||
for (int i = 0; i < ctx->nb_streams; i++) {
|
||||
OutputStream *ost = of->streams[i];
|
||||
|
||||
nb_streams[ost->type]++;
|
||||
nb_streams[ost->type + 1]++;
|
||||
|
||||
MATCH_PER_STREAM_OPT(disposition, str, dispositions[i], ctx, ost->st);
|
||||
|
||||
@ -2310,7 +2311,7 @@ static int set_dispositions(Muxer *mux, const OptionsContext *o)
|
||||
ost->st->disposition = ost->ist->st->disposition;
|
||||
|
||||
if (ost->st->disposition & AV_DISPOSITION_DEFAULT)
|
||||
have_default[ost->type] = 1;
|
||||
have_default[ost->type + 1] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2335,12 +2336,12 @@ static int set_dispositions(Muxer *mux, const OptionsContext *o)
|
||||
OutputStream *ost = of->streams[i];
|
||||
enum AVMediaType type = ost->type;
|
||||
|
||||
if (nb_streams[type] < 2 || have_default[type] ||
|
||||
if (nb_streams[type + 1] < 2 || have_default[type + 1] ||
|
||||
ost->st->disposition & AV_DISPOSITION_ATTACHED_PIC)
|
||||
continue;
|
||||
|
||||
ost->st->disposition |= AV_DISPOSITION_DEFAULT;
|
||||
have_default[type] = 1;
|
||||
have_default[type + 1] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user