X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fnuv.c;h=aec87f45fee4553d76887fef2fd9727770c5478c;hb=9e13df3776da3a101e895e2840f6f23f5a6f74a0;hp=612f845b4bd9eb150a62916da15ae609610b0939;hpb=c1e439d7e9abab3cebdc937636393b1656e095d9;p=ffmpeg diff --git a/libavformat/nuv.c b/libavformat/nuv.c index 612f845b4bd..aec87f45fee 100644 --- a/libavformat/nuv.c +++ b/libavformat/nuv.c @@ -83,10 +83,6 @@ 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 ((ret = ff_get_extradata(NULL, vst->codecpar, pb, size)) < 0) return ret; size = 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),