svga: check that we don't exceed temp register limit
authorBrian Paul <brianp@vmware.com>
Thu, 17 Nov 2011 23:36:26 +0000 (16:36 -0700)
committerBrian Paul <brianp@vmware.com>
Thu, 23 Feb 2012 14:49:05 +0000 (07:49 -0700)
And assert on the register index in dst_register().  The dest can
only be an output or temp reg and there's more of the later.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/drivers/svga/svga_tgsi.c
src/gallium/drivers/svga/svga_tgsi_emit.h

index 2be6f05e009487b0d211b86c6aabfeeee29492b6..02ce59f3931ad96737a419acb6fc86e376bb4f42 100644 (file)
@@ -290,6 +290,10 @@ svga_tgsi_translate( const struct svga_shader *shader,
    emit.nr_hw_float_const = (emit.imm_start + emit.info.file_max[TGSI_FILE_IMMEDIATE] + 1);
 
    emit.nr_hw_temp = emit.info.file_max[TGSI_FILE_TEMPORARY] + 1;
+   
+   if (emit.nr_hw_temp >= SVGA3D_TEMPREG_MAX)
+      goto fail;
+
    emit.in_main_func = TRUE;
 
    if (!svga_shader_emit_header( &emit ))
index 3f458eb09cf7306b3cd394ebd089e148dae5ddc3..1769d62570d948d88d9a525cb66f2cf92736eb92 100644 (file)
@@ -266,6 +266,8 @@ dst_register( unsigned file,
    assert(number < (1 << 11));
    assert(file <= SVGA3DREG_PREDICATE);
 
+   assert(number < SVGA3D_TEMPREG_MAX);
+
    dest.value = 0;
    dest.num = number;
    dest.type_upper = file >> 3;