aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-01-17 00:55:44 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2016-01-31 00:24:27 +0100
commit78c9e1f00b4c96cf33f0a5ab6148b76c244e5ab5 (patch)
tree50584c6fb09706882487bf4d59d5770ca4ac0edb
parent9acbe5fa8489f26223aef0247b7486b0197118f8 (diff)
downloadffmpeg-78c9e1f00b4c96cf33f0a5ab6148b76c244e5ab5.tar.gz
swscale/swscale_unscaled: Fix odd height inputs for bayer_to_rgb24_wrapper()
Fixes: 372d2df1f04b49e25f109f07f90b1505/asan_heap-oob_2835d2e_8501_99e0114d7ba3a6db885d0b4684d200c1.cine Fixes out of array read Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit ad3b6fa7d83db7de951ed891649af93a47e74be5) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libswscale/swscale_unscaled.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/libswscale/swscale_unscaled.c b/libswscale/swscale_unscaled.c
index 76735ddd35..1e5faf6633 100644
--- a/libswscale/swscale_unscaled.c
+++ b/libswscale/swscale_unscaled.c
@@ -1059,6 +1059,8 @@ static int bayer_to_rgb24_wrapper(SwsContext *c, const uint8_t* src[], int srcSt
default: return 0;
}
+ av_assert0(srcSliceH > 1);
+
copy(srcPtr, srcStride[0], dstPtr, dstStride[0], c->srcW);
srcPtr += 2 * srcStride[0];
dstPtr += 2 * dstStride[0];
@@ -1069,7 +1071,10 @@ static int bayer_to_rgb24_wrapper(SwsContext *c, const uint8_t* src[], int srcSt
dstPtr += 2 * dstStride[0];
}
- copy(srcPtr, srcStride[0], dstPtr, dstStride[0], c->srcW);
+ if (i + 1 == srcSliceH) {
+ copy(srcPtr, -srcStride[0], dstPtr, -dstStride[0], c->srcW);
+ } else if (i < srcSliceH)
+ copy(srcPtr, srcStride[0], dstPtr, dstStride[0], c->srcW);
return srcSliceH;
}