You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
mov: Do not set stsd_count if mov_read_stsd() fails
Based on an FFmpeg patch by Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@@ -1891,24 +1891,33 @@ static int mov_read_stsd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
if (!sc->extradata)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
sc->stsd_count = entries;
|
||||
sc->extradata_size = av_mallocz_array(sc->stsd_count, sizeof(*sc->extradata_size));
|
||||
if (!sc->extradata_size)
|
||||
return AVERROR(ENOMEM);
|
||||
sc->extradata_size = av_mallocz_array(entries, sizeof(*sc->extradata_size));
|
||||
if (!sc->extradata_size) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
ret = ff_mov_read_stsd_entries(c, pb, sc->stsd_count);
|
||||
ret = ff_mov_read_stsd_entries(c, pb, entries);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto fail;
|
||||
|
||||
sc->stsd_count = entries;
|
||||
|
||||
/* Restore back the primary extradata. */
|
||||
av_free(st->codecpar->extradata);
|
||||
st->codecpar->extradata_size = sc->extradata_size[0];
|
||||
st->codecpar->extradata = av_mallocz(sc->extradata_size[0] + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!st->codecpar->extradata)
|
||||
return AVERROR(ENOMEM);
|
||||
if (!st->codecpar->extradata) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
}
|
||||
memcpy(st->codecpar->extradata, sc->extradata[0], sc->extradata_size[0]);
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
av_freep(&sc->extradata);
|
||||
av_freep(&sc->extradata_size);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int mov_read_stsc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
|
Reference in New Issue
Block a user