summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian <brian@nostromo.localnet.net>2007-02-25 19:01:16 -0700
committerBrian <brian@nostromo.localnet.net>2007-02-25 19:01:16 -0700
commit313d50e9036558185e189873acb861bfa73f41a1 (patch)
treea22e2e6e841ab75e88cb9a1184abf8ae0276e2a6
parentb85d4d61a7f93a9f2d58a1d701808584e0fce8c7 (diff)
fix bounds checking in get_register_pointer()
-rw-r--r--src/mesa/shader/prog_execute.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c
index 2db4e69522..d42b2e99b9 100644
--- a/src/mesa/shader/prog_execute.c
+++ b/src/mesa/shader/prog_execute.c
@@ -84,14 +84,20 @@ get_register_pointer(const struct prog_src_register *source,
{
if (source->RelAddr) {
const GLint reg = source->Index + machine->AddressReg[0][0];
- if (reg < 0 || reg > MAX_NV_VERTEX_PROGRAM_PARAMS)
- return ZeroVec;
- else if (source->File == PROGRAM_ENV_PARAM)
- return machine->EnvParams[reg];
+ if (source->File == PROGRAM_ENV_PARAM)
+ if (reg < 0 || reg >= MAX_PROGRAM_ENV_PARAMS)
+ return ZeroVec;
+ else
+ return machine->EnvParams[reg];
else {
+ const struct gl_program_parameter_list *params;
ASSERT(source->File == PROGRAM_LOCAL_PARAM ||
source->File == PROGRAM_STATE_VAR);
- return machine->CurProgram->Parameters->ParameterValues[reg];
+ params = machine->CurProgram->Parameters;
+ if (reg < 0 || reg >= params->NumParameters)
+ return ZeroVec;
+ else
+ return params->ParameterValues[reg];
}
}