glx: fix null pointer deref in __glXGenerateError()
authorBrian Paul <brianp@vmware.com>
Thu, 10 Mar 2011 15:50:52 +0000 (08:50 -0700)
committerBrian Paul <brianp@vmware.com>
Thu, 10 Mar 2011 15:50:52 +0000 (08:50 -0700)
The gc var would be NULL if called from line 238.  Instead, get
the opcode from __glXSetupForCommand(dpy) as done in other places.
And remove the unused gc parameter.

Fixes a bug reported by "John Doe" on 3/9/2011.

NOTE: This is a candidate for the 7.10 branch.

src/glx/glxcurrent.c

index 9a6499037b17dd8fa56727ee0c54480c08891ce2..1f845ce65e18f07db1af00574dc92c2b8af052de 100644 (file)
@@ -189,7 +189,7 @@ glXGetCurrentDrawable(void)
 }
 
 static void
-__glXGenerateError(Display * dpy, struct glx_context *gc, XID resource,
+__glXGenerateError(Display * dpy, XID resource,
                    BYTE errorCode, CARD16 minorCode)
 {
    xError error;
@@ -198,7 +198,7 @@ __glXGenerateError(Display * dpy, struct glx_context *gc, XID resource,
    error.resourceID = resource;
    error.sequenceNumber = dpy->request;
    error.type = X_Error;
-   error.majorCode = gc->majorOpcode;
+   error.majorCode = __glXSetupForCommand(dpy);
    error.minorCode = minorCode;
    _XError(dpy, &error);
 }
@@ -235,12 +235,12 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
    }
 
    if (gc == NULL && (draw != None || read != None)) {
-      __glXGenerateError(dpy, gc, (draw != None) ? draw : read,
+      __glXGenerateError(dpy, (draw != None) ? draw : read,
                          BadMatch, X_GLXMakeContextCurrent);
       return False;
    }
    if (gc != NULL && (draw == None || read == None)) {
-      __glXGenerateError(dpy, gc, None, BadMatch, X_GLXMakeContextCurrent);
+      __glXGenerateError(dpy, None, BadMatch, X_GLXMakeContextCurrent);
       return False;
    }
 
@@ -284,7 +284,7 @@ MakeContextCurrent(Display * dpy, GLXDrawable draw,
    __glXUnlock();
 
    if (ret) {
-      __glXGenerateError(dpy, gc, None, ret, X_GLXMakeContextCurrent);
+      __glXGenerateError(dpy, None, ret, X_GLXMakeContextCurrent);
       return GL_FALSE;
    }