[Mesa-dev] [PATCH] mesa: prevent SIGSEGV passing GL_NONE to _mesa_ReadBuffer()

Ahmed Allam ahmabdabd at hotmail.com
Thu Jan 23 08:45:36 PST 2014


On 01/23/2014 06:04 PM, Brian Paul wrote:
> On 01/23/2014 07:31 AM, Ahmed Allam wrote:
>> From: Ahmed Allam <ahmabdabd at hotmail.com>
>>
>>
>> Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=73956
>>
>> Signed-off-by: Ahmed Allam <ahmabdabd at hotmail.com>
>> ---
>>   src/mesa/main/buffers.c | 4 +++-
>>   1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
>> index 2bdbf41..6c846cb 100644
>> --- a/src/mesa/main/buffers.c
>> +++ b/src/mesa/main/buffers.c
>> @@ -623,7 +623,9 @@ _mesa_ReadBuffer(GLenum buffer)
>>
>>      if (buffer == GL_NONE) {
>>         /* This is legal--it means that no buffer should be bound for
>> reading. */
>> -      srcBuffer = -1;
>> +      _mesa_error(ctx, GL_INVALID_ENUM,
>> +                           "glReadBuffer(buffer=0x%x)", buffer);
>> +     return;
>>      }
>>      else {
>>         /* general case / window-system framebuffer */
>
>
> According to the GL 3.2 spec, GL_NONE is a legal value for 
> glReadBuffer() and should not generate an error (as the comment says.) 
> And I just verified it with NVIDIA's driver.
>
> The spec says "ReadPixels generates an INVALID_OPERATION error if it 
> attempts to select a color buffer while READ_BUFFER is NONE". That's 
> what we do.  However, it looks like NVIDIA's driver is doing something 
> else.  It's actually doing glRead/CopyPixels w/out raising an error.
>
> Anyway, can you try this patch:
>
> diff --git a/src/mesa/state_tracker/st_cb_fbo.c 
> b/src/mesa/state_tracker/st_cb_fbo.c
> index 637f7ee..eca04b8 100644
> --- a/src/mesa/state_tracker/st_cb_fbo.c
> +++ b/src/mesa/state_tracker/st_cb_fbo.c
> @@ -700,7 +700,8 @@ st_ReadBuffer(struct gl_context *ctx, GLenum buffer)
>     (void) buffer;
>
>     /* add the renderbuffer on demand */
> -   st_manager_add_color_renderbuffer(st, fb, fb->_ColorReadBufferIndex);
> +   if (fb->_ColorReadBufferIndex >= 0)
> +      st_manager_add_color_renderbuffer(st, fb, 
> fb->_ColorReadBufferIndex);
>  }
>
>
> -Brian
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
Patch worked without any visible problems and without 
glReadBuffer(GL_NONE) producing any errors. I am starting to believe 
that this is the expected behavior as opposed to generating 
INVALID_OPERATION. Thanks.

Ahmed


More information about the mesa-dev mailing list