From 31a1fd9d6dcf298b7ed61ac06d54e6f9cd2dee03 Mon Sep 17 00:00:00 2001 From: Yaron Cohen-Tal Date: Fri, 29 Jul 2016 17:55:49 +0300 Subject: [PATCH 1/3] Check for NULL extensions string Some X server not supporting any OpenGL feature, glXQueryExtensionsString will return NULL and causes the function to fail. Thanks to Emmanuel Stapf (manus@eiffel.com) for the original patch. This was verified running an application on macOS while the X server was running on Windows Xming 7.5.0.10 Signed-off-by: Emmanuele Bassi --- src/dispatch_common.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/dispatch_common.c b/src/dispatch_common.c index 013027f85bd5..ba6fca373d76 100644 --- a/src/dispatch_common.c +++ b/src/dispatch_common.c @@ -347,6 +347,8 @@ epoxy_conservative_gl_version(void) bool epoxy_extension_in_string(const char *extension_list, const char *ext) { + if (!extension_list) + return false; const char *ptr = extension_list; int len = strlen(ext); -- 2.14.3 From 7a1a79ec3b68857f8a0b1d26811fec2d00ea4fb2 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 7 Dec 2016 15:12:15 +0000 Subject: [PATCH 2/3] Avoid C99 declaration after statement The rest of the library is C89-only, so we should keep it that way. --- src/dispatch_common.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/dispatch_common.c b/src/dispatch_common.c index ba6fca373d76..4f58be2caed2 100644 --- a/src/dispatch_common.c +++ b/src/dispatch_common.c @@ -347,11 +347,12 @@ epoxy_conservative_gl_version(void) bool epoxy_extension_in_string(const char *extension_list, const char *ext) { - if (!extension_list) - return false; const char *ptr = extension_list; int len = strlen(ext); + if (extension_list == NULL || *extension_list == '\0') + return false; + /* Make sure that don't just find an extension with our name as a prefix. */ while (true) { ptr = strstr(ptr, ext); -- 2.14.3 From 40d724e11ea37a4177bbb04fbe954c840c8e102d Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 12 Dec 2016 14:18:15 +0000 Subject: [PATCH 3/3] Ensure we don't assert if GLX is not available Certain X server do not have GLX enabled or supported, such as x2go. We can handle this case gracefully inside libepoxy. Signed-off-by: Emmanuele Bassi --- src/dispatch_glx.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/dispatch_glx.c b/src/dispatch_glx.c index 78e61c24a761..9e4cef62c86a 100644 --- a/src/dispatch_glx.c +++ b/src/dispatch_glx.c @@ -57,11 +57,17 @@ epoxy_glx_version(Display *dpy, int screen) int ret; version_string = glXQueryServerString(dpy, screen, GLX_VERSION); + if (!version_string) + return 0; + ret = sscanf(version_string, "%d.%d", &server_major, &server_minor); assert(ret == 2); server = server_major * 10 + server_minor; version_string = glXGetClientString(dpy, GLX_VERSION); + if (!version_string) + return 0; + ret = sscanf(version_string, "%d.%d", &client_major, &client_minor); assert(ret == 2); client = client_major * 10 + client_minor; -- 2.14.3