Mesa (master): glx: Explicitly reject servers that only support GLX 1.0

Ian Romanick idr at kemper.freedesktop.org
Mon Dec 19 22:56:29 UTC 2011


Module: Mesa
Branch: master
Commit: e4be406f09fcb3756cd0e8dd0539f62bafb1bcca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e4be406f09fcb3756cd0e8dd0539f62bafb1bcca

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Mon Nov 28 18:31:21 2011 -0800

glx: Explicitly reject servers that only support GLX 1.0

__glXInitialize calls AllocAndFetchScreenConfigs.
AllocAndFetchScreenConfigs unconditionally sends a glXQuerySeverString
request to the server.  This request is only supported with GLX 1.1 or
later, so we were already implicitly incompatible with GLX 1.0
servers.  How many more similar bugs lurk in the code that nobody has
noticed in years?

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/glx/glxext.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/glx/glxext.c b/src/glx/glxext.c
index 8254544..baa2489 100644
--- a/src/glx/glxext.c
+++ b/src/glx/glxext.c
@@ -836,9 +836,12 @@ __glXInitialize(Display * dpy)
    dpyPriv->serverGLXvendor = 0x0;
    dpyPriv->serverGLXversion = 0x0;
 
-   /* See if the versions are compatible */
+   /* See if the versions are compatible.  This GLX implementation does not
+    * work with servers that only support GLX 1.0.
+    */
    if (!QueryVersion(dpy, dpyPriv->majorOpcode,
-		     &dpyPriv->majorVersion, &dpyPriv->minorVersion)) {
+		     &dpyPriv->majorVersion, &dpyPriv->minorVersion)
+       || (dpyPriv->majorVersion == 1 && dpyPriv->minorVersion < 1)) {
       Xfree(dpyPriv);
       _XUnlockMutex(_Xglobal_lock);
       return NULL;
@@ -884,8 +887,7 @@ __glXInitialize(Display * dpy)
       return NULL;
    }
 
-   if (dpyPriv->majorVersion == 1 && dpyPriv->minorVersion >= 1)
-      __glXClientInfo(dpy, dpyPriv->majorOpcode);
+   __glXClientInfo(dpy, dpyPriv->majorOpcode);
 
    /* Grab the lock again and add the dispay private, unless somebody
     * beat us to initializing on this display in the meantime. */




More information about the mesa-commit mailing list