OSDN Git Service

glsl/images: bounds check image unit assignment
authorDave Airlie <airlied@redhat.com>
Mon, 23 May 2016 02:49:25 +0000 (12:49 +1000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Thu, 2 Jun 2016 12:10:50 +0000 (13:10 +0100)
The CTS test:
GL45-CTS.multi_bind.dispatch_bind_image_textures
binds 192 image uniforms, we reject this later,
but not until after we trash the contents of the
struct gl_shader.

Error now reads:
Too many compute shader image uniforms (192 > 16)
instead of
Too many compute shader image uniforms (2745344416 > 16)

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
(cherry picked from commit f87352d76966b6e4b0ab5fa9129ccd1ade0c2e7a)

src/compiler/glsl/link_uniform_initializers.cpp

index c6346d5..bf6d394 100644 (file)
@@ -145,6 +145,8 @@ set_opaque_binding(void *mem_ctx, gl_shader_program *prog,
                     storage->opaque[sh].active) {
                for (unsigned i = 0; i < elements; i++) {
                   const unsigned index = storage->opaque[sh].index + i;
+                  if (index >= ARRAY_SIZE(shader->ImageUnits))
+                     break;
                   shader->ImageUnits[index] = storage->storage[i].i;
                }
             }