diff options
author | Janne Grunau <janne-libav@jannau.net> | 2011-12-10 12:55:08 +0100 |
---|---|---|
committer | Janne Grunau <janne-libav@jannau.net> | 2011-12-10 15:29:54 +0100 |
commit | 2b53e696c864c4ade3c38707f8595e17a998bedc (patch) | |
tree | 4657e2f93ff845dba7f00d8bc06fcdb00e6866af | |
parent | 97334f106cfbf9787808b922bfb3c2973712f47d (diff) | |
download | ffmpeg-2b53e696c864c4ade3c38707f8595e17a998bedc.tar.gz |
ptx: emit a warning on insufficient picture data
Return the whole packet as consumed in this case and not the size the
packet should have had. Move the insufficient data check into the for
condition to fix a ISO C90 error on bigendian.
-rw-r--r-- | libavcodec/ptx.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/libavcodec/ptx.c b/libavcodec/ptx.c index eee0d58994..75b42d5073 100644 --- a/libavcodec/ptx.c +++ b/libavcodec/ptx.c @@ -84,9 +84,7 @@ static int ptx_decode_frame(AVCodecContext *avctx, void *data, int *data_size, ptr = p->data[0]; stride = p->linesize[0]; - for (y=0; y<h; y++) { - if (buf_end - buf < w * bytes_per_pixel) - break; + for (y = 0; y < h && buf_end - buf < w * bytes_per_pixel; y++) { #if HAVE_BIGENDIAN unsigned int x; for (x=0; x<w*bytes_per_pixel; x+=bytes_per_pixel) @@ -101,6 +99,11 @@ static int ptx_decode_frame(AVCodecContext *avctx, void *data, int *data_size, *picture = s->picture; *data_size = sizeof(AVPicture); + if (y < h) { + av_log(avctx, AV_LOG_WARNING, "incomplete packet\n"); + return avpkt->size; + } + return offset + w*h*bytes_per_pixel; } |