X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frmdec.c;h=c8035889390968df9a67cb930a1ae4ee4fa1fb3d;hb=a63496cc882428aefafc85d2f60e0908b020bffe;hp=cb0481ed4d9f471a8952a3eda0923fe6e9849e22;hpb=13872d2aa1f454f103e501b91417c44f0f184d53;p=ffmpeg diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index cb0481ed4d9..c8035889390 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -207,6 +207,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, break; case AV_CODEC_ID_RA_288: st->codecpar->extradata_size= 0; + av_freep(&st->codecpar->extradata); ast->audio_framesize = st->codecpar->block_align; st->codecpar->block_align = coded_framesize; break; @@ -235,6 +236,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, return -1; } st->codecpar->block_align = ff_sipr_subpk_size[flavor]; + st->need_parsing = AVSTREAM_PARSE_FULL_RAW; } else { if(sub_packet_size <= 0){ av_log(s, AV_LOG_ERROR, "sub_packet_size is invalid\n"); @@ -933,6 +935,10 @@ ff_rm_parse_packet (AVFormatContext *s, AVIOContext *pb, ast->sub_packet_cnt = 0; rm->audio_stream_num = st->index; + if (st->codecpar->block_align <= 0) { + av_log(s, AV_LOG_ERROR, "Invalid block alignment %d\n", st->codecpar->block_align); + return AVERROR_INVALIDDATA; + } rm->audio_pkt_cnt = h * w / st->codecpar->block_align; } else if ((ast->deint_id == DEINT_ID_VBRF) || (ast->deint_id == DEINT_ID_VBRS)) { @@ -1043,7 +1049,9 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) st = s->streams[i]; } - if (len <= 0 || avio_feof(s->pb)) + if (avio_feof(s->pb)) + return AVERROR_EOF; + if (len <= 0) return AVERROR(EIO); res = ff_rm_parse_packet (s, s->pb, st, st->priv_data, len, pkt,