main/getteximage: Use the height argument to calculate memcpy copy size
authorEduardo Lima Mitev <elima@igalia.com>
Tue, 22 Nov 2016 11:12:48 +0000 (12:12 +0100)
committerEduardo Lima Mitev <elima@igalia.com>
Wed, 23 Nov 2016 08:22:32 +0000 (09:22 +0100)
In get_tex_memcpy, when copying texture data directly from source
to destination (when row strides match for both src and dst), the
copy size is currently calculated using the full texture height
instead of the sub-region height parameter that was passed.

This can cause a read past the end of the mapped buffer when y-offset
is greater than zero, leading to a segfault.

Fixes CTS test (from crash to pass):
* GL45-CTS/get_texture_sub_image/functional_test

v2: (Jason) Use the passed 'height' instead of copying til the
end of the buffer (tex-height - yoffset).

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/main/texgetimage.c

index b9002787344f86d7cc0cb3886f9f00d4cf174c75..0186819994e4837ada07bae531bb8cab881ac7d6 100644 (file)
@@ -654,7 +654,7 @@ get_tex_memcpy(struct gl_context *ctx,
 
       if (src) {
          if (bytesPerRow == dstRowStride && bytesPerRow == srcRowStride) {
-            memcpy(dst, src, bytesPerRow * texImage->Height);
+            memcpy(dst, src, bytesPerRow * height);
          }
          else {
             GLuint row;