[Mesa-dev] [PATCH] glsl: Fix memory leak in builtin_builder::_image_prototype.

Francisco Jerez currojerez at riseup.net
Fri Oct 3 00:53:57 PDT 2014


Ian Romanick <idr at freedesktop.org> writes:

> Since this is Curro's code, I'm CC'ing me.
>
> On 10/01/2014 03:12 AM, Iago Toral Quiroga wrote:
>> in_var calls the ir_variable constructor, which dups the variable name.
>> ---
>>  src/glsl/builtin_functions.cpp | 8 +++++---
>>  1 file changed, 5 insertions(+), 3 deletions(-)
>> 
>> diff --git a/src/glsl/builtin_functions.cpp b/src/glsl/builtin_functions.cpp
>> index 5a024cb..7d61fcc 100644
>> --- a/src/glsl/builtin_functions.cpp
>> +++ b/src/glsl/builtin_functions.cpp
>> @@ -4465,9 +4465,11 @@ builtin_builder::_image_prototype(const glsl_type *image_type,
>>        sig->parameters.push_tail(in_var(glsl_type::int_type, "sample"));
>>  
>>     /* Data arguments. */
>> -   for (unsigned i = 0; i < num_arguments; ++i)
>> -      sig->parameters.push_tail(in_var(data_type,
>> -                                       ralloc_asprintf(NULL, "arg%d", i)));
>> +   for (unsigned i = 0; i < num_arguments; ++i) {
>> +      char *arg_name = ralloc_asprintf(NULL, "arg%d", i);
>> +      sig->parameters.push_tail(in_var(data_type, arg_name));
>> +      ralloc_free(arg_name);
>> +   }
>
> Using a NULL memory context is generally bad... precisely because it
> often leads to memory leaks.
>
> There are a couple ways to fix this.  Since all of the image functions
> have a limited number of parameters, we could either:
>
>  - Have a fixed size buffer that we snprintf to.
>
I think I would also prefer this solution (snprintf'ing to a fixed-size
buffer on the stack), but I don't really have any strong objection to
this patch as-is:

Reviewed-by: Francisco Jerez <currojerez at riseup.net>

>  - Have a table of all the parameter names.
>
>  - Since this is the function prototype, I don't think we need names for
> the parameters at all.  Just pass NULL?
>
>>     /* Set the maximal set of qualifiers allowed for this image
>>      * built-in.  Function calls with arguments having fewer
>> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20141003/456186f2/attachment.sig>


More information about the mesa-dev mailing list