Module: Mesa
Branch: master
Commit: e2066a4344e05ab66442e5de5a3caa19f7809323
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e2066a4344e05ab66442e5de5a3caa19f7809323

Author: Marek Olšák <[email protected]>
Date:   Sat Apr 11 14:40:09 2015 +0200

glsl_to_tgsi: add assertions for detecting out-of-bounds immediates access

Reviewed-by: Brian Paul <[email protected]>

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 5344ff9..a38f1b6 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -4349,6 +4349,7 @@ struct st_translate {
    struct ureg_src *constants;
    int num_constants;
    struct ureg_src *immediates;
+   int num_immediates;
    struct ureg_dst outputs[PIPE_MAX_SHADER_OUTPUTS];
    struct ureg_src inputs[PIPE_MAX_SHADER_INPUTS];
    struct ureg_dst address[3];
@@ -4569,6 +4570,7 @@ src_register(struct st_translate *t, const st_src_reg 
*reg)
                   t->constants[reg->index] : ureg_imm4f(t->ureg, 0, 0, 0, 0);
 
    case PROGRAM_IMMEDIATE:
+      assert(reg->index >= 0 && reg->index < t->num_immediates);
       return t->immediates[reg->index];
 
    case PROGRAM_INPUT:
@@ -4689,6 +4691,7 @@ translate_tex_offset(struct st_translate *t,
 
    switch (in_offset->file) {
    case PROGRAM_IMMEDIATE:
+      assert(in_offset->index >= 0 && in_offset->index < t->num_immediates);
       imm_src = t->immediates[in_offset->index];
 
       offset.File = imm_src.File;
@@ -5334,6 +5337,8 @@ st_translate_program(
       ret = PIPE_ERROR_OUT_OF_MEMORY;
       goto out;
    }
+   t->num_immediates = program->num_immediates;
+
    i = 0;
    foreach_in_list(immediate_storage, imm, &program->immediates) {
       assert(i < program->num_immediates);
@@ -5385,6 +5390,7 @@ out:
       free(t->constants);
       t->num_constants = 0;
       free(t->immediates);
+      t->num_immediates = 0;
 
       if (t->error) {
          debug_printf("%s: translate error flag set\n", __func__);

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to