diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-02-12 19:53:40 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-02-12 20:10:35 +0100 |
commit | 1ac0fa50eff30d413206cffa5f47f7fe6d4849b1 (patch) | |
tree | f3f9326f6b796e0a738c9578f8a6b5447cf28604 | |
parent | 1ecce266fa5b6e7b8006744ee73ca38d2f594726 (diff) | |
download | ffmpeg-1ac0fa50eff30d413206cffa5f47f7fe6d4849b1.tar.gz |
pngdec/filter: dont access out of array elements at the end
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/pngdec.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index 97c0ad19b6..193e35e591 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -190,7 +190,7 @@ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w if(bpp >= 2) g = dst[1];\ if(bpp >= 3) b = dst[2];\ if(bpp >= 4) a = dst[3];\ - for(; i < size; i+=bpp) {\ + for(; i <= size - bpp; i+=bpp) {\ dst[i+0] = r = op(r, src[i+0], last[i+0]);\ if(bpp == 1) continue;\ dst[i+1] = g = op(g, src[i+1], last[i+1]);\ @@ -206,13 +206,9 @@ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w else if(bpp == 2) UNROLL1(2, op)\ else if(bpp == 3) UNROLL1(3, op)\ else if(bpp == 4) UNROLL1(4, op)\ - else {\ - for (; i < size; i += bpp) {\ - int j;\ - for (j = 0; j < bpp; j++)\ - dst[i+j] = op(dst[i+j-bpp], src[i+j], last[i+j]);\ - }\ - } + for (; i < size; i++) {\ + dst[i] = op(dst[i-bpp], src[i], last[i]);\ + }\ /* NOTE: 'dst' can be equal to 'last' */ static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type, |