glx/indirect: Validate the context version in CreateContextAttribs
authorAdam Jackson <ajax@redhat.com>
Tue, 10 Nov 2020 21:23:23 +0000 (16:23 -0500)
committerMarge Bot <eric+marge@anholt.net>
Thu, 3 Dec 2020 04:40:28 +0000 (04:40 +0000)
commitf39fd3dce72eaef59ab39a23b75030ef9efc2a40
tree2cb2eacc1b638908b4d87411b6c1b4dbb0e4b795
parent6a265420dd585a81fa5c8060122201ac6befcbb9
glx/indirect: Validate the context version in CreateContextAttribs

This is Sort Of handled by nerfing GL_VERSION in __indirect_glGetString,
but that doesn't cover GLES contexts which we also don't have any
indirect support for. Xorg's GLX would reject this for us since it has
the same limitation, but NVIDIA's GLX seems to interpret a request for
ES 2.0 as desktop, despite having the ES2 profile bit set, leading to a
very confusing GL_VERSION string and probably not the ES2-compatible
context you were hoping for.

Since we may now return NULL from indirect_create_context_attribs for
reasons other than malloc failure, we need to reasonably handle the case
where gc == NULL by the time we get to the XCB call. We rely on the
server to generate correct return values in this case, but if it
succeeds despite our client-side failure we just throw GLXBadFBConfig
(chosen to keep piglit/glx-create-context-core-profile happy, since
nothing else seems to hit it).

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7369>
src/glx/create_context.c
src/glx/indirect_glx.c
src/glx/tests/create_context_unittest.cpp