[Mesa-dev] [PATCH] egl: return EGL_BAD_ALLOC if _eglConvertAttribsToInt fails

Emil Velikov emil.l.velikov at gmail.com
Tue May 26 17:53:01 PDT 2015


On 27 May 2015 at 01:40, Marek Olšák <maraeo at gmail.com> wrote:
> On Wed, May 27, 2015 at 3:20 AM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
>> On 27/05/15 00:12, Marek Olšák wrote:
>>> On Wed, May 27, 2015 at 3:07 AM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
>>>> On 26/05/15 21:59, Marek Olšák wrote:
>>>>> From: Marek Olšák <marek.olsak at amd.com>
>>>>>
>>>>> This is a fix for the EGL 1.5 patch series.
>>>> Can you squash this with the offending patches (12 and 13). Pretty
>>>> please :-)
>>>>
>>>>> ---
>>>>>  src/egl/main/eglapi.c | 25 +++++++++++++++++++------
>>>>>  1 file changed, 19 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
>>>>> index 7afc091..3df4968 100644
>>>>> --- a/src/egl/main/eglapi.c
>>>>> +++ b/src/egl/main/eglapi.c
>>>>> @@ -263,13 +263,14 @@ _eglConvertAttribsToInt(const EGLAttrib *attr_list)
>>>>>        while (attr_list[size] != EGL_NONE)
>>>>>           size += 2;
>>>>>
>>>>> -      if (size) {
>>>>> -         size += 1; /* add space for EGL_NONE */
>>>>> -         int_attribs = malloc(size * sizeof(int_attribs[0]));
>>>>> +      size += 1; /* add space for EGL_NONE */
>>>>>
>>>>> -         for (i = 0; i < size; i++)
>>>>> -            int_attribs[i] = attr_list[i];
>>>>> -      }
>>>>> +      int_attribs = malloc(size * sizeof(int_attribs[0]));
>>>>> +      if (!int_attribs)
>>>>> +         return NULL;
>>>>> +
>>>>> +      for (i = 0; i < size; i++)
>>>>> +         int_attribs[i] = attr_list[i];
>>>> Set the final value int_attrib[size] to EGL_NONE ?
>>>
>>> EGL_NONE is already set by the user, that's why "size" is always +1.
>>>
>> Most likely I'm missing something extremely obvious, so if you can bare
>> with me that'll be appreciated:
>>  - First we walk through the attr_list, looking for the size (without
>> the sentinel/terminating EGL_NONE).
>>  - Then we allocate a "size + 1" sized array and copy only the first
>> "size" elements.
>
> "size" is in the form "2*n+1" because of these:
>
> while (attr_list[size] != EGL_NONE)
>    size += 2;
> size += 1;
>
> Then, "size" elements are allocated and copied.
>
I'm a goon. Looking at this multiple times and I've always parsed it
as "malloc(size + 1)" rather than "size++; malloc(size)".

Thanks for the patience
Emil


More information about the mesa-dev mailing list