[Mesa-dev] [PATCH 06/11] glsl: Check realloc return value in ir_function::matching_signature()

Juha-Pekka Heikkila juhapekka.heikkila at gmail.com
Thu Sep 18 03:26:52 PDT 2014


On 10.09.2014 00:59, Anuj Phogat wrote:
> On Mon, Sep 8, 2014 at 11:53 PM, Juha-Pekka Heikkila
> <juhapekka.heikkila at gmail.com> wrote:
>> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
>> ---
>>  src/glsl/ir_function.cpp | 11 +++++++++--
>>  1 file changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/glsl/ir_function.cpp b/src/glsl/ir_function.cpp
>> index 98bec45..2b2643c 100644
>> --- a/src/glsl/ir_function.cpp
>> +++ b/src/glsl/ir_function.cpp
>> @@ -24,6 +24,7 @@
>>  #include "glsl_types.h"
>>  #include "ir.h"
>>  #include "glsl_parser_extras.h"
>> +#include "main/errors.h"
>>
>>  typedef enum {
>>     PARAMETER_LIST_NO_MATCH,
>> @@ -296,6 +297,7 @@ ir_function::matching_signature(_mesa_glsl_parse_state *state,
>>                                  bool *is_exact)
>>  {
>>     ir_function_signature **inexact_matches = NULL;
>> +   ir_function_signature **inexact_matches_temp;
>>     ir_function_signature *match = NULL;
>>     int num_inexact_matches = 0;
>>
>> @@ -321,11 +323,16 @@ ir_function::matching_signature(_mesa_glsl_parse_state *state,
>>           free(inexact_matches);
>>           return sig;
>>        case PARAMETER_LIST_INEXACT_MATCH:
>> -         inexact_matches = (ir_function_signature **)
>> +         inexact_matches_temp = (ir_function_signature **)
>>                 realloc(inexact_matches,
>>                         sizeof(*inexact_matches) *
>>                         (num_inexact_matches + 1));
>> -         assert(inexact_matches);
>> +         if (inexact_matches_temp == NULL) {
>> +            _mesa_error_no_memory(__func__);
>> +            free(inexact_matches);
> This free is not required. inexact_matches is null.

Why is inexact matches null? This reallocation is inside
foreach_in_list{..} and the amount of inexact matches is counted with
num_inexact_matches variable. If we're not getting the null from realloc
on the first run inexact_matches would have valid pointer.

>> +            return NULL;
>> +         }
>> +         inexact_matches = inexact_matches_temp;
>>           inexact_matches[num_inexact_matches++] = sig;
>>           continue;
>>        case PARAMETER_LIST_NO_MATCH:
>> --
>> 1.8.5.1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



More information about the mesa-dev mailing list