[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