mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-20 14:00:03 +01:00
glx: fix BindTexImageEXT length check
The request is followed by a list of attributes.
X.Org bug#33449
Reported-and-tested-by: meng <mengmeng.meng@intel.com>
Signed-off-by: Julien Cristau <jcristau@debian.org>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 1137c11be0)
This commit is contained in:
parent
5f3e015ae0
commit
d6831f5aa1
2 changed files with 14 additions and 2 deletions
|
|
@ -1698,13 +1698,21 @@ int __glXDisp_BindTexImageEXT(__GLXclientState *cl, GLbyte *pc)
|
|||
GLXDrawable drawId;
|
||||
int buffer;
|
||||
int error;
|
||||
CARD32 num_attribs;
|
||||
|
||||
REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 8);
|
||||
if ((sizeof(xGLXVendorPrivateReq) + 12) >> 2 > client->req_len)
|
||||
return BadLength;
|
||||
|
||||
pc += __GLX_VENDPRIV_HDR_SIZE;
|
||||
|
||||
drawId = *((CARD32 *) (pc));
|
||||
buffer = *((INT32 *) (pc + 4));
|
||||
num_attribs = *((CARD32 *) (pc + 8));
|
||||
if (num_attribs > (UINT32_MAX >> 3)) {
|
||||
client->errorValue = num_attribs;
|
||||
return BadValue;
|
||||
}
|
||||
REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 12 + (num_attribs << 3));
|
||||
|
||||
if (buffer != GLX_FRONT_LEFT_EXT)
|
||||
return __glXError(GLXBadPixmap);
|
||||
|
|
|
|||
|
|
@ -649,19 +649,23 @@ int __glXDispSwap_BindTexImageEXT(__GLXclientState *cl, GLbyte *pc)
|
|||
xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *) pc;
|
||||
GLXDrawable *drawId;
|
||||
int *buffer;
|
||||
CARD32 *num_attribs;
|
||||
__GLX_DECLARE_SWAP_VARIABLES;
|
||||
|
||||
REQUEST_FIXED_SIZE(xGLXVendorPrivateReq, 8);
|
||||
if ((sizeof(xGLXVendorPrivateReq) + 12) >> 2 > client->req_len)
|
||||
return BadLength;
|
||||
|
||||
pc += __GLX_VENDPRIV_HDR_SIZE;
|
||||
|
||||
drawId = ((GLXDrawable *) (pc));
|
||||
buffer = ((int *) (pc + 4));
|
||||
num_attribs = ((CARD32 *) (pc + 8));
|
||||
|
||||
__GLX_SWAP_SHORT(&req->length);
|
||||
__GLX_SWAP_INT(&req->contextTag);
|
||||
__GLX_SWAP_INT(drawId);
|
||||
__GLX_SWAP_INT(buffer);
|
||||
__GLX_SWAP_INT(num_attribs);
|
||||
|
||||
return __glXDisp_BindTexImageEXT(cl, (GLbyte *)pc);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue