Commit e91ee763 authored by Freya Gentz's avatar Freya Gentz 🌱 Committed by Adam Jackson
Browse files

glx: Fix synthetic error generation in __glXSendError

To quote Uli Schlachter, who understands this stuff more than I do:

>   The function __glXSendError() in mesa's src/glx/glx_error.c invents an X11
> protocol error out of thin air. For the sequence number it uses dpy->request.
> This is the sequence number of the last request that was sent. _XError() will
> then update dpy->last_request_read based on the sequence number of the error
> that just "came in".
>
>   If now another something comes in with a sequence number less than
> dpy->last_request_read, since sequence numbers are monotonically increasing,
> widen() will incorrectly add 1<<32 to the sequence number and things might go
> downhill afterwards.

`__glXSendErrorForXcb` was also patched, as that's the function that
`glXCreateContextAttribsARB` actually uses.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99781
Cc: mesa-stable@lists.freedesktop.org
Fixes: ad503c41

 'apple: Initial import of libGL for OSX from AppleSGLX svn repository'
Reviewed-by: Adam Jackson's avatarAdam Jackson <ajax@redhat.com>
Reviewed-by: default avatarIan Romanick <ian.d.romanick@intel.com>
Signed-off-by: Freya Gentz's avatarHal Gentz <zegentzy@protonmail.com>
parent 9628631a
...@@ -54,7 +54,7 @@ __glXSendError(Display * dpy, int_fast8_t errorCode, uint_fast32_t resourceID, ...@@ -54,7 +54,7 @@ __glXSendError(Display * dpy, int_fast8_t errorCode, uint_fast32_t resourceID,
error.errorCode = glx_dpy->codes->first_error + errorCode; error.errorCode = glx_dpy->codes->first_error + errorCode;
} }
error.sequenceNumber = dpy->request; error.sequenceNumber = dpy->last_request_read;
error.resourceID = resourceID; error.resourceID = resourceID;
error.minorCode = minorCode; error.minorCode = minorCode;
error.majorCode = glx_dpy->majorOpcode; error.majorCode = glx_dpy->majorOpcode;
...@@ -73,7 +73,7 @@ __glXSendErrorForXcb(Display * dpy, const xcb_generic_error_t *err) ...@@ -73,7 +73,7 @@ __glXSendErrorForXcb(Display * dpy, const xcb_generic_error_t *err)
error.type = X_Error; error.type = X_Error;
error.errorCode = err->error_code; error.errorCode = err->error_code;
error.sequenceNumber = err->sequence; error.sequenceNumber = dpy->last_request_read;
error.resourceID = err->resource_id; error.resourceID = err->resource_id;
error.minorCode = err->minor_code; error.minorCode = err->minor_code;
error.majorCode = err->major_code; error.majorCode = err->major_code;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment