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

Author: Daniel Czarnowski <[email protected]>
Date:   Wed Feb 10 09:36:05 2016 -0800

glx: fix crash with bad fbconfig

GLX documentation states:
        glXCreateNewContext can generate the following errors: (...)
        GLXBadFBConfig if config is not a valid GLXFBConfig

Function checks if the given config is a valid config and sets proper
error code.

Fixes currently crashing glx-fbconfig-bad Piglit test.

v2: coding style cleanups (Emil, Topi)
    use DefaultScreen macro (Emil)

Signed-off-by: Matt Roper <[email protected]>
Signed-off-by: Tapani Pälli <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
Cc: "11.2" <[email protected]>

---

 src/glx/glxcmds.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c
index 38b9059..3856032 100644
--- a/src/glx/glxcmds.c
+++ b/src/glx/glxcmds.c
@@ -1630,6 +1630,29 @@ glXCreateNewContext(Display * dpy, GLXFBConfig fbconfig,
                     int renderType, GLXContext shareList, Bool allowDirect)
 {
    struct glx_config *config = (struct glx_config *) fbconfig;
+   int screen = DefaultScreen(dpy);
+   struct glx_config **config_list;
+   int list_size;
+   unsigned i;
+
+   if (!config) {
+       __glXSendError(dpy, GLXBadFBConfig, 0, X_GLXCreateNewContext, false);
+       return NULL;
+   }
+
+   config_list = (struct glx_config **)
+      glXGetFBConfigs(dpy, screen, &list_size);
+
+   for (i = 0; i < list_size; i++) {
+       if (config_list[i] == config)
+           break;
+   }
+   free(config_list);
+
+   if (i == list_size) {
+       __glXSendError(dpy, GLXBadFBConfig, 0, X_GLXCreateNewContext, false);
+       return NULL;
+   }
 
    return CreateContext(dpy, config->fbconfigID, config, shareList,
                        allowDirect, X_GLXCreateNewContext, renderType,

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to