glsl: fixed uninitialized pointer
authorJakob Sinclair <sinclair.jakob@openmailbox.org>
Wed, 11 May 2016 12:10:19 +0000 (14:10 +0200)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Thu, 12 May 2016 07:46:36 +0000 (09:46 +0200)
Class "ir_constant" had a bunch of constructors where the pointer member
"array_elements" had not been initialized. This could have lead to unsafe
code if something had tried to write anything to it. This patch fixes
this issue by initializing the pointer to NULL in all the constructors.
This issue was discovered by Coverity.

CID: 401603, 401604, 401605, 401610

Signed-off-by: Jakob Sinclair <sinclair.jakob@openmailbox.org>
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
src/compiler/glsl/ir.cpp

index d69ab131199aa8d584f93958a5e41cb6d1473260..9637d7ad78cc42f2b1d13ce8ff8c26548b1b8b6e 100644 (file)
@@ -663,12 +663,15 @@ ir_expression::variable_referenced() const
 ir_constant::ir_constant()
    : ir_rvalue(ir_type_constant)
 {
+   this->array_elements = NULL;
 }
 
 ir_constant::ir_constant(const struct glsl_type *type,
                         const ir_constant_data *data)
    : ir_rvalue(ir_type_constant)
 {
+   this->array_elements = NULL;
+
    assert((type->base_type >= GLSL_TYPE_UINT)
          && (type->base_type <= GLSL_TYPE_BOOL));
 
@@ -744,6 +747,7 @@ ir_constant::ir_constant(bool b, unsigned vector_elements)
 ir_constant::ir_constant(const ir_constant *c, unsigned i)
    : ir_rvalue(ir_type_constant)
 {
+   this->array_elements = NULL;
    this->type = c->type->get_base_type();
 
    switch (this->type->base_type) {
@@ -759,6 +763,7 @@ ir_constant::ir_constant(const ir_constant *c, unsigned i)
 ir_constant::ir_constant(const struct glsl_type *type, exec_list *value_list)
    : ir_rvalue(ir_type_constant)
 {
+   this->array_elements = NULL;
    this->type = type;
 
    assert(type->is_scalar() || type->is_vector() || type->is_matrix()