[FFmpeg-cvslog] jv: detect partial packets in the demuxer

Janne Grunau git at videolan.org
Fri Feb 14 02:05:44 CET 2014


ffmpeg | branch: master | Janne Grunau <janne-libav at jannau.net> | Wed Feb 12 20:08:52 2014 +0100| [8a2250344b19a343d830a902dbcf4c0b929ea49b] | committer: Janne Grunau

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.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8a2250344b19a343d830a902dbcf4c0b929ea49b
---

 libavformat/jvdec.c |   14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/libavformat/jvdec.c b/libavformat/jvdec.c
index 006acec..84d55da 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)



More information about the ffmpeg-cvslog mailing list