X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fnuv.c;h=aec87f45fee4553d76887fef2fd9727770c5478c;hb=bc70684e74a185d7b80c8b80bdedda659cb581b8;hp=9bdea4ab5542ecde24dbc72254995ab867ac9c0d;hpb=5ab44ff20cdc0e05adecbd0cd352d25fcb930094;p=ffmpeg diff --git a/libavformat/nuv.c b/libavformat/nuv.c index 9bdea4ab554..aec87f45fee 100644 --- a/libavformat/nuv.c +++ b/libavformat/nuv.c @@ -47,7 +47,7 @@ typedef enum { NUV_MYTHEXT = 'X' } nuv_frametype; -static int nuv_probe(AVProbeData *p) +static int nuv_probe(const AVProbeData *p) { if (!memcmp(p->buf, "NuppelVideo", 12)) return AVPROBE_SCORE_MAX; @@ -74,7 +74,7 @@ static int get_codec_data(AVFormatContext *s, AVIOContext *pb, AVStream *vst, if (!vst && !myth) return 1; // no codec data needed while (!avio_feof(pb)) { - int size, subtype; + int size, subtype, ret; frametype = avio_r8(pb); switch (frametype) { @@ -83,12 +83,8 @@ static int get_codec_data(AVFormatContext *s, AVIOContext *pb, AVStream *vst, avio_skip(pb, 6); size = PKTSIZE(avio_rl32(pb)); if (vst && subtype == 'R') { - if (vst->codecpar->extradata) { - av_freep(&vst->codecpar->extradata); - vst->codecpar->extradata_size = 0; - } - if (ff_get_extradata(NULL, vst->codecpar, pb, size) < 0) - return AVERROR(ENOMEM); + if ((ret = ff_get_extradata(NULL, vst->codecpar, pb, size)) < 0) + return ret; size = 0; if (!myth) return 0; @@ -121,6 +117,10 @@ static int get_codec_data(AVFormatContext *s, AVIOContext *pb, AVStream *vst, ast->codecpar->bits_per_coded_sample = avio_rl32(pb); ast->codecpar->channels = avio_rl32(pb); ast->codecpar->channel_layout = 0; + if (ast->codecpar->channels <= 0) { + av_log(s, AV_LOG_ERROR, "Invalid channels %d\n", ast->codecpar->channels); + return AVERROR_INVALIDDATA; + } id = ff_wav_codec_get_id(ast->codecpar->codec_tag, ast->codecpar->bits_per_coded_sample); @@ -288,7 +288,6 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) memcpy(pkt->data, hdr, copyhdrsize); ret = avio_read(pb, pkt->data + copyhdrsize, size); if (ret < 0) { - av_packet_unref(pkt); return ret; } if (ret < size) @@ -395,7 +394,7 @@ static int64_t nuv_read_dts(AVFormatContext *s, int stream_index, } -AVInputFormat ff_nuv_demuxer = { +const AVInputFormat ff_nuv_demuxer = { .name = "nuv", .long_name = NULL_IF_CONFIG_SMALL("NuppelVideo"), .priv_data_size = sizeof(NUVContext),