From 8a2250344b19a343d830a902dbcf4c0b929ea49b Mon Sep 17 00:00:00 2001 From: Janne Grunau Date: Wed, 12 Feb 2014 20:08:52 +0100 Subject: [PATCH] jv: detect partial packets in the demuxer Fixes fate-jv under valgrind which reports a different CRC for the last frame from a partial read. --- libavformat/jvdec.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libavformat/jvdec.c b/libavformat/jvdec.c index 006acec7bc..84d55daad1 100644 --- a/libavformat/jvdec.c +++ b/libavformat/jvdec.c @@ -184,16 +184,22 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) case JV_VIDEO: jv->state++; if (jvf->video_size || jvf->palette_size) { + int ret; int size = jvf->video_size + jvf->palette_size; if (av_new_packet(pkt, size + JV_PREAMBLE_SIZE)) return AVERROR(ENOMEM); AV_WL32(pkt->data, jvf->video_size); pkt->data[4] = jvf->video_type; - if (avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size) < 0) - return AVERROR(EIO); - - pkt->size = size + JV_PREAMBLE_SIZE; + ret = avio_read(pb, pkt->data + JV_PREAMBLE_SIZE, size); + if (ret < 0) + return ret; + if (ret < size) { + memset(pkt->data + JV_PREAMBLE_SIZE + ret, 0, + FF_INPUT_BUFFER_PADDING_SIZE); + pkt->flags |= AV_PKT_FLAG_CORRUPT; + } + pkt->size = ret + JV_PREAMBLE_SIZE; pkt->stream_index = 1; pkt->pts = jv->pts; if (jvf->video_type != 1)