[Xcb] [PATCH 5/5] GetCrtcGamma: Fix error handling.
Jamey Sharp
jamey at minilop.net
Mon Nov 9 17:01:03 PST 2009
On Mon, Nov 9, 2009 at 2:56 PM, Adam Jackson <ajax at redhat.com> wrote:
> We didn't treat _XReply failure as fatal. Parsing an xError as a gamma
> ramp reply doesn't work that often.
>
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
> src/XrrCrtc.c | 11 +++++------
> 1 files changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/src/XrrCrtc.c b/src/XrrCrtc.c
> index 3f048e2..697987a 100644
> --- a/src/XrrCrtc.c
> +++ b/src/XrrCrtc.c
> @@ -179,7 +179,7 @@ XRRGetCrtcGamma (Display *dpy, RRCrtc crtc)
> XExtDisplayInfo *info = XRRFindDisplay(dpy);
> xRRGetCrtcGammaReply rep;
> xRRGetCrtcGammaReq *req;
> - XRRCrtcGamma *crtc_gamma;
> + XRRCrtcGamma *crtc_gamma = NULL;
> long nbytes;
> long nbytesRead;
>
> @@ -192,7 +192,7 @@ XRRGetCrtcGamma (Display *dpy, RRCrtc crtc)
> req->crtc = crtc;
>
> if (!_XReply (dpy, (xReply *) &rep, 0, xFalse))
> - rep.status = RRSetConfigFailed;
> + goto out;
>
> nbytes = (long) rep.length << 2;
>
> @@ -204,9 +204,7 @@ XRRGetCrtcGamma (Display *dpy, RRCrtc crtc)
> if (!crtc_gamma)
> {
> _XEatData (dpy, (unsigned long) nbytes);
> - UnlockDisplay (dpy);
> - SyncHandle ();
> - return NULL;
> + goto out;
> }
> _XRead16 (dpy, crtc_gamma->red, rep.size * 2);
> _XRead16 (dpy, crtc_gamma->green, rep.size * 2);
> @@ -214,7 +212,8 @@ XRRGetCrtcGamma (Display *dpy, RRCrtc crtc)
>
> if (nbytes > nbytesRead)
> _XEatData (dpy, (unsigned long) (nbytes - nbytesRead));
> -
> +
> +out:
> UnlockDisplay (dpy);
> SyncHandle ();
> return crtc_gamma;
> --
> 1.6.5.2
Reviewed-by: Jamey Sharp <jamey at minilop.net>
I pointed this bug out to Keith last week. XCB-based Xlib assert-fails
if you try to read past the end of your reply, as this function does
in the error case, and we got a bug report on the xcb list. I don't
have a test case for your patch but it looks correct to me.
I also reviewed the other four patches in this series. Feel free to
include my Reviewed-by in those as well.
Jamey
More information about the Xcb
mailing list