Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-09-19 16:25:38 +0300
committerMichael Niedermayer <michael@niedermayer.cc>2016-09-23 19:18:18 +0300
commit0e318f110bcd6bb8e7de9127f2747272e60f48d7 (patch)
tree98b8ed0798ac327799881e34eb5722877e88b461 /libavcodec/cavsdsp.c
parentd41c9b1c275f4d1ffe64fe61580d75749acf7fe6 (diff)
avcodec/cavsdsp: use av_clip_uint8() for idct
Fixes out of array read Fixes: 1.swf Found-by: 连一汉 <lianyihan@360.cn> Tested-by: 连一汉 <lianyihan@360.cn> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/cavsdsp.c')
-rw-r--r--libavcodec/cavsdsp.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/libavcodec/cavsdsp.c b/libavcodec/cavsdsp.c
index 91f6d7350b..df9490ad8f 100644
--- a/libavcodec/cavsdsp.c
+++ b/libavcodec/cavsdsp.c
@@ -188,7 +188,6 @@ static void cavs_filter_ch_c(uint8_t *d, int stride, int alpha, int beta, int tc
static void cavs_idct8_add_c(uint8_t *dst, int16_t *block, int stride) {
int i;
int16_t (*src)[8] = (int16_t(*)[8])block;
- const uint8_t *cm = ff_crop_tab + MAX_NEG_CROP;
src[0][0] += 8;
@@ -243,14 +242,14 @@ static void cavs_idct8_add_c(uint8_t *dst, int16_t *block, int stride) {
const int b2 = a5 - a7;
const int b3 = a4 - a6;
- dst[i + 0*stride] = cm[ dst[i + 0*stride] + ((b0 + b4) >> 7)];
- dst[i + 1*stride] = cm[ dst[i + 1*stride] + ((b1 + b5) >> 7)];
- dst[i + 2*stride] = cm[ dst[i + 2*stride] + ((b2 + b6) >> 7)];
- dst[i + 3*stride] = cm[ dst[i + 3*stride] + ((b3 + b7) >> 7)];
- dst[i + 4*stride] = cm[ dst[i + 4*stride] + ((b3 - b7) >> 7)];
- dst[i + 5*stride] = cm[ dst[i + 5*stride] + ((b2 - b6) >> 7)];
- dst[i + 6*stride] = cm[ dst[i + 6*stride] + ((b1 - b5) >> 7)];
- dst[i + 7*stride] = cm[ dst[i + 7*stride] + ((b0 - b4) >> 7)];
+ dst[i + 0*stride] = av_clip_uint8( dst[i + 0*stride] + ((b0 + b4) >> 7));
+ dst[i + 1*stride] = av_clip_uint8( dst[i + 1*stride] + ((b1 + b5) >> 7));
+ dst[i + 2*stride] = av_clip_uint8( dst[i + 2*stride] + ((b2 + b6) >> 7));
+ dst[i + 3*stride] = av_clip_uint8( dst[i + 3*stride] + ((b3 + b7) >> 7));
+ dst[i + 4*stride] = av_clip_uint8( dst[i + 4*stride] + ((b3 - b7) >> 7));
+ dst[i + 5*stride] = av_clip_uint8( dst[i + 5*stride] + ((b2 - b6) >> 7));
+ dst[i + 6*stride] = av_clip_uint8( dst[i + 6*stride] + ((b1 - b5) >> 7));
+ dst[i + 7*stride] = av_clip_uint8( dst[i + 7*stride] + ((b0 - b4) >> 7));
}
}