Fix texture sampling buffer overrun. Sampling byte4 data currently reads 8 bytes for unpacking purposes. Allocate 4 more bytes to prevent reading outside the image, even though it's unused data. Bug 21935792 Change-Id: I162fb3f3575131cedb008f82ef5170e773719e41 Reviewed-on: https://swiftshader-review.googlesource.com/3572 Reviewed-by: Alexis Hétu <sugoi@google.com> Tested-by: Nicolas Capens <capn@google.com> Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/Renderer/Surface.cpp b/src/Renderer/Surface.cpp index 300ce35..40aa920 100644 --- a/src/Renderer/Surface.cpp +++ b/src/Renderer/Surface.cpp
@@ -2382,7 +2382,9 @@ int width2 = (width + 1) & ~1; int height2 = (height + 1) & ~1; - return allocateZero(size(width2, height2, depth, format)); + // FIXME: Unpacking byte4 to short4 in the sampler currently involves reading 8 bytes, + // so we have to allocate 4 extra bytes to avoid buffer overruns. + return allocateZero(size(width2, height2, depth, format) + 4); } void Surface::memfill4(void *buffer, int pattern, int bytes)