Mesa (glsl2): glsl2: strdup the field names used in dereference_record.

Eric Anholt anholt at kemper.freedesktop.org
Wed Jul 21 00:30:27 UTC 2010


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

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Jul 20 17:17:47 2010 -0700

glsl2: strdup the field names used in dereference_record.

Otherwise, after linking and freeing the old data, the pointer would
dangle.  Partial fix for glsl1-struct*.

---

 src/glsl/ir.cpp |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index 1648848..ba8ee7b 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -514,7 +514,7 @@ ir_dereference_record::ir_dereference_record(ir_rvalue *value,
 {
    this->ir_type = ir_type_dereference_record;
    this->record = value;
-   this->field = field;
+   this->field = talloc_strdup(this, field);
    this->type = (this->record != NULL)
       ? this->record->type->field_type(field) : glsl_type::error_type;
 }
@@ -527,7 +527,7 @@ ir_dereference_record::ir_dereference_record(ir_variable *var,
 
    this->ir_type = ir_type_dereference_record;
    this->record = new(ctx) ir_dereference_variable(var);
-   this->field = field;
+   this->field = talloc_strdup(this, field);
    this->type = (this->record != NULL)
       ? this->record->type->field_type(field) : glsl_type::error_type;
 }




More information about the mesa-commit mailing list