swr: validate backend state numAttributes
authorTim Rowley <timothy.o.rowley@intel.com>
Wed, 15 Mar 2017 16:42:43 +0000 (11:42 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Wed, 15 Mar 2017 20:08:59 +0000 (15:08 -0500)
General protection and prevents us from smashing the stack
on the first clear state validation (a7b8d50bcb).  Fixes crash
using icc.

Reviewed-by: Bruce Cherniak <bruce.cherniak@intel.com>
src/gallium/drivers/swr/swr_state.cpp

index db214af9936fac0a052a8f28d691d6ff183c1c3c..2fafabd80eee1efbd6a6eee12a5653deab22266f 100644 (file)
@@ -1651,6 +1651,8 @@ swr_update_derived(struct pipe_context *pipe,
    backendState.numAttributes =
       ((ctx->gs ? ctx->gs->info.base.num_outputs : ctx->vs->info.base.num_outputs) - 1) +
       (ctx->rasterizer->sprite_coord_enable ? 1 : 0);
+   backendState.numAttributes = std::min((size_t)backendState.numAttributes,
+                                         sizeof(backendState.numComponents));
    for (unsigned i = 0; i < backendState.numAttributes; i++)
       backendState.numComponents[i] = 4;
    backendState.constantInterpolationMask = ctx->fs->constantMask |