avcodec/msrle: use av_image_get_linesize() to calculate the linesize

Fixes out of array access
Fixes: 14a74a0a2dc67ede543f0e35d834fbbe-asan_heap-oob_49572c_556_cov_215466444_44_001_engine_room.mov
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
pull/58/head
Michael Niedermayer 11 years ago
parent 2218fbe05e
commit c919e1ca2e
  1. 3
      libavcodec/msrle.c

@ -35,6 +35,7 @@
#include "avcodec.h" #include "avcodec.h"
#include "internal.h" #include "internal.h"
#include "msrledec.h" #include "msrledec.h"
#include "libavutil/imgutils.h"
typedef struct MsrleContext { typedef struct MsrleContext {
AVCodecContext *avctx; AVCodecContext *avctx;
@ -110,7 +111,7 @@ static int msrle_decode_frame(AVCodecContext *avctx,
/* FIXME how to correctly detect RLE ??? */ /* FIXME how to correctly detect RLE ??? */
if (avctx->height * istride == avpkt->size) { /* assume uncompressed */ if (avctx->height * istride == avpkt->size) { /* assume uncompressed */
int linesize = (avctx->width * avctx->bits_per_coded_sample + 7) / 8; int linesize = av_image_get_linesize(avctx->pix_fmt, avctx->width, 0);
uint8_t *ptr = s->frame->data[0]; uint8_t *ptr = s->frame->data[0];
uint8_t *buf = avpkt->data + (avctx->height-1)*istride; uint8_t *buf = avpkt->data + (avctx->height-1)*istride;
int i, j; int i, j;

Loading…
Cancel
Save