[gtk+/gdk-egl-x11: 1/4] gdk/x11: Resolve glXQueryVersion manually
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gdk-egl-x11: 1/4] gdk/x11: Resolve glXQueryVersion manually
- Date: Tue, 6 Dec 2016 17:29:04 +0000 (UTC)
commit e246a81bc3aed8f48d6659d644212884878876f7
Author: Emmanuele Bassi <ebassi gnome org>
Date: Tue Nov 29 00:03:54 2016 +0000
gdk/x11: Resolve glXQueryVersion manually
Instead of going through libepoxy, which may have unintended side
effects, we should ask the X11 server if it supports the GLX extension
in the good old way, by dlsym() (or g_module_symbol()). This should
avoid crashes in case the X server is "special".
gdk/x11/gdkglcontext-x11.c | 25 +++++++++++++++++++++++--
1 files changed, 23 insertions(+), 2 deletions(-)
---
diff --git a/gdk/x11/gdkglcontext-x11.c b/gdk/x11/gdkglcontext-x11.c
index 0819f89..274390f 100644
--- a/gdk/x11/gdkglcontext-x11.c
+++ b/gdk/x11/gdkglcontext-x11.c
@@ -847,6 +847,9 @@ gdk_x11_screen_init_gl (GdkScreen *screen)
Display *dpy;
int error_base, event_base;
int screen_num;
+ GModule *module;
+ typedef Bool (* FP_GLX_Query_Version) (Display *dpy, int *major, int *minor);
+ FP_GLX_Query_Version glx_query_version;
if (display_x11->have_glx)
return TRUE;
@@ -856,8 +859,26 @@ gdk_x11_screen_init_gl (GdkScreen *screen)
dpy = gdk_x11_display_get_xdisplay (display);
- if (!glXQueryExtension (dpy, &error_base, &event_base))
- return FALSE;
+ /* We do this without going through libepoxy to avoid the trampoline and
+ * ensure that we don't have side effects that may cause crashes due to
+ * server that lie, or that simply do not support GLX.
+ *
+ * See: https://bugzilla.gnome.org/show_bug.cgi?id=775279
+ */
+ module = g_module_open (NULL, 0);
+ if (!g_module_symbol (module, "glXQueryVersion", (gpointer) &glx_query_version))
+ {
+ g_module_close (module);
+ return FALSE;
+ }
+
+ if (!(* glx_query_version) (dpy, &error_base, &event_base))
+ {
+ g_module_close (module);
+ return FALSE;
+ }
+
+ g_module_close (module);
screen_num = GDK_X11_SCREEN (screen)->screen_num;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]