aboutsummaryrefslogtreecommitdiff
path: root/debian/patches/057_nx-X11_sanitize-eventmasks.full.patch
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2014-06-22 09:07:56 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2014-06-22 09:07:56 +0200
commit53a0a47b87986eace410addd1af546e7f6925423 (patch)
tree2b7e24662de05141458a4acfcf62492c16a36e23 /debian/patches/057_nx-X11_sanitize-eventmasks.full.patch
parentd8c9f89b127bc1669cd59b5d5c9aec0af63f8352 (diff)
downloadnx-libs-53a0a47b87986eace410addd1af546e7f6925423.tar.gz
nx-libs-53a0a47b87986eace410addd1af546e7f6925423.tar.bz2
nx-libs-53a0a47b87986eace410addd1af546e7f6925423.zip
renmae patch 057
Diffstat (limited to 'debian/patches/057_nx-X11_sanitize-eventmasks.full.patch')
-rw-r--r--debian/patches/057_nx-X11_sanitize-eventmasks.full.patch70
1 files changed, 70 insertions, 0 deletions
diff --git a/debian/patches/057_nx-X11_sanitize-eventmasks.full.patch b/debian/patches/057_nx-X11_sanitize-eventmasks.full.patch
new file mode 100644
index 000000000..901aba61d
--- /dev/null
+++ b/debian/patches/057_nx-X11_sanitize-eventmasks.full.patch
@@ -0,0 +1,70 @@
+Description: No session window with on PPC64 builds
+Author: Mihai Moldovan <ionic@ionic.de>
+Abstract:
+ Multiple endiannes issues were setting incorrect event masks when creating and
+ drawing X11 windows.
+ .
+ This time, a smaller integer has been casted to a bigger one and passed to some
+ function actually setting its value.
+ .
+ This meant, that garbage from stack was attached to the smaller integer value,
+ putting unknown memory into the lower bytes of the bigger integer.
+ .
+ Fix this by creating a big, initialized temporary variable, let the function do
+ its magic on that one and pass the value back to the smaller variable--and
+ cross your fingers the smaller variable can hold it without overrunning. (The
+ last bit is a design issue we can't really fix and has been around even before
+ this patch.)
+
+--- a/nx-X11/programs/Xserver/hw/nxagent/Window.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Window.c
+@@ -327,7 +327,10 @@
+
+ if (mask & CWEventMask)
+ {
+- nxagentGetEventMask(pWin, (Mask*)&attributes.event_mask);
++ /* Assume that the mask fits in int... broken on Big Endian 64bit systems. */
++ Mask tmp_mask = attributes.event_mask;
++ nxagentGetEventMask(pWin, &tmp_mask);
++ attributes.event_mask = (int)tmp_mask;
+ }
+ #ifdef WARNING
+ else
+@@ -2891,7 +2894,10 @@
+
+ if (mask & CWEventMask)
+ {
+- nxagentGetEventMask(pWin, (Mask*)&attributes.event_mask);
++ /* Assume that the mask fits in int... broken on Big Endian 64bit systems. */
++ Mask tmp_mask = attributes.event_mask;
++ nxagentGetEventMask(pWin, &tmp_mask);
++ attributes.event_mask = (int)tmp_mask;
+ }
+ #ifdef WARNING
+ else
+@@ -3352,7 +3358,10 @@
+
+ if (nxagentOption(Rootless) && nxagentWindowTopLevel(pWin))
+ {
+- nxagentGetEventMask(pWin, (Mask*)&attributes.event_mask);
++ /* Assume that the mask fits in int... broken on Big Endian 64bit systems. */
++ Mask tmp_mask = attributes.event_mask;
++ nxagentGetEventMask(pWin, &tmp_mask);
++ attributes.event_mask = (int)tmp_mask;
+
+ XChangeWindowAttributes(nxagentDisplay, nxagentWindow(pWin), mask, &attributes);
+ }
+--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
+@@ -1665,7 +1665,10 @@
+
+ attributes.background_pixel = nxagentBlackPixel;
+
+- nxagentGetDefaultEventMask((Mask*)&attributes.event_mask);
++ /* Assume that the mask fits in int... broken on Big Endian 64bit systems. */
++ Mask tmp_mask = attributes.event_mask;
++ nxagentGetDefaultEventMask(&tmp_mask);
++ attributes.event_mask = (int)tmp_mask;
+
+ attributes.colormap = nxagentDefaultVisualColormap(nxagentDefaultVisual(pScreen));
+