From 982dcd5df4b18b5534dba7382c0ff186dbdfbe82 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 17 Apr 2026 10:33:52 +1000 Subject: [PATCH] glx: fix wrong pointer passed to non-swap handlers in TexImage/CopySubBuffer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three GLX byte-swap dispatch functions advance the pc pointer past the vendor private header (pc += __GLX_VENDPRIV_HDR_SIZE) for local field swapping, then pass the ADVANCED pc to the non-swap handler. But the non-swap handlers expect pc to point to the start of the xGLXVendorPrivateReq — they cast pc to xGLXVendorPrivateReq* to access req->contextTag, then do their own pc += __GLX_VENDPRIV_HDR_SIZE. Co-Authored-by: Claude Code Part-of: --- glx/glxcmdsswap.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/glx/glxcmdsswap.c b/glx/glxcmdsswap.c index 7d6674470..d2460be23 100644 --- a/glx/glxcmdsswap.c +++ b/glx/glxcmdsswap.c @@ -639,7 +639,7 @@ __glXDispSwap_BindTexImageEXT(__GLXclientState * cl, GLbyte * pc) __GLX_SWAP_INT(buffer); __GLX_SWAP_INT(num_attribs); - return __glXDisp_BindTexImageEXT(cl, (GLbyte *) pc); + return __glXDisp_BindTexImageEXT(cl, (GLbyte *) req); } int @@ -664,7 +664,7 @@ __glXDispSwap_ReleaseTexImageEXT(__GLXclientState * cl, GLbyte * pc) __GLX_SWAP_INT(drawId); __GLX_SWAP_INT(buffer); - return __glXDisp_ReleaseTexImageEXT(cl, (GLbyte *) pc); + return __glXDisp_ReleaseTexImageEXT(cl, (GLbyte *) req); } int @@ -692,7 +692,7 @@ __glXDispSwap_CopySubBufferMESA(__GLXclientState * cl, GLbyte * pc) __GLX_SWAP_INT(pc + 12); __GLX_SWAP_INT(pc + 16); - return __glXDisp_CopySubBufferMESA(cl, pc); + return __glXDisp_CopySubBufferMESA(cl, (GLbyte *) req); }