mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-09 13:08:12 +02:00
dix: set errorValue correctly when XID lookup fails in ChangeGCXIDs()
dixLookupResourceByType always overwrites the pointer passed in as the first arg, so we shouldn't use the union it's in after that to get the requested XID value to put in the errorValue. Closes: #1857 Fixes:2d7eb4a19("Pre-validate ChangeGC XIDs.") Reported-by: Mouse <mouse@Rodents-Montreal.ORG> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> (cherry picked from commitac42c39145) (cherry picked from commit7f1050de78) Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2151>
This commit is contained in:
parent
ab16adb21a
commit
c001e1330a
1 changed files with 5 additions and 2 deletions
7
dix/gc.c
7
dix/gc.c
|
|
@ -441,6 +441,7 @@ ChangeGCXIDs(ClientPtr client, GC * pGC, BITS32 mask, CARD32 *pC32)
|
|||
vals[i].val = pC32[i];
|
||||
for (i = 0; i < ARRAY_SIZE(xidfields); ++i) {
|
||||
int offset, rc;
|
||||
XID id;
|
||||
|
||||
if (!(mask & xidfields[i].mask))
|
||||
continue;
|
||||
|
|
@ -449,11 +450,13 @@ ChangeGCXIDs(ClientPtr client, GC * pGC, BITS32 mask, CARD32 *pC32)
|
|||
vals[offset].ptr = NullPixmap;
|
||||
continue;
|
||||
}
|
||||
rc = dixLookupResourceByType(&vals[offset].ptr, vals[offset].val,
|
||||
/* save the id, since dixLookupResourceByType overwrites &vals[offset] */
|
||||
id = vals[offset].val;
|
||||
rc = dixLookupResourceByType(&vals[offset].ptr, id,
|
||||
xidfields[i].type, client,
|
||||
xidfields[i].access_mode);
|
||||
if (rc != Success) {
|
||||
client->errorValue = vals[offset].val;
|
||||
client->errorValue = id;
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue