diff options
author | Ulrich Sibiller <uli42@gmx.de> | 2020-10-16 18:57:47 +0200 |
---|---|---|
committer | Ulrich Sibiller <uli42@gmx.de> | 2020-10-16 20:47:31 +0200 |
commit | d1a967f3aefcffc6babeb25fccc912c0bfdb9fe3 (patch) | |
tree | 699e7cfae05945731de8fb335ab7887a3c2ff77d /nx-X11/programs | |
parent | 67330d9ea185de0f08731c684363078e349b1845 (diff) | |
download | nx-libs-d1a967f3aefcffc6babeb25fccc912c0bfdb9fe3.tar.gz nx-libs-d1a967f3aefcffc6babeb25fccc912c0bfdb9fe3.tar.bz2 nx-libs-d1a967f3aefcffc6babeb25fccc912c0bfdb9fe3.zip |
randr: fix broken macros / memory corruption
By casting the rrScrPriv to ScreenPtr we are using the offsets from
the Screen structure for referencing data in the rrScrPriv structure
causing data corruption. As both macros use the same casting this
still works until the location where the data resides is
overwritten. For 64bit the location was the "rotations" member in
rrScrPriv which was not problematic because it is barely used. But on
32bit it was "numCrtcs" which is heavily used. On unwrap this was 0
and lead to a segfault.
Fixes ArcticaProject/nx-libs#943
Diffstat (limited to 'nx-X11/programs')
-rw-r--r-- | nx-X11/programs/Xserver/randr/randr.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/nx-X11/programs/Xserver/randr/randr.c b/nx-X11/programs/Xserver/randr/randr.c index c742cf6e0..f8401a5cd 100644 --- a/nx-X11/programs/Xserver/randr/randr.c +++ b/nx-X11/programs/Xserver/randr/randr.c @@ -69,12 +69,12 @@ static int RRNScreens; #define wrap(priv,real,mem,func) {\ - ((ScreenPtr)priv)->mem = ((ScreenPtr)real)->mem; \ - ((ScreenPtr)real)->mem = func; \ + priv->mem = real->mem; \ + real->mem = func; \ } #define unwrap(priv,real,mem) {\ - ((ScreenPtr)real)->mem = ((ScreenPtr)priv)->mem; \ + real->mem = priv->mem; \ } static int ProcRRDispatch(ClientPtr pClient); |