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

Anuj Phogat anuj.phogat at gmail.com
Thu Sep 18 10:44:04 PDT 2014


On Thu, Sep 18, 2014 at 3:26 AM, Juha-Pekka Heikkila
<juhapekka.heikkila at gmail.com> wrote:
> 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.
>
Right. Ignore my comment. I'm fine with this patch.
>>> +            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