OSDN Git Service

Fix texture sampling buffer overrun.
authorNicolas Capens <capn@google.com>
Fri, 26 Jun 2015 17:00:48 +0000 (13:00 -0400)
committerNicolas Capens <capn@google.com>
Fri, 26 Jun 2015 19:59:28 +0000 (19:59 +0000)
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>
src/Renderer/Surface.cpp

index 300ce35..40aa920 100644 (file)
@@ -2382,7 +2382,9 @@ namespace sw
                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)