aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/patches/057_nx-X11_sanitize-eventmasks.full.patch70
-rw-r--r--debian/patches/series1
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Screen.c5
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Window.c15
4 files changed, 16 insertions, 75 deletions
diff --git a/debian/patches/057_nx-X11_sanitize-eventmasks.full.patch b/debian/patches/057_nx-X11_sanitize-eventmasks.full.patch
deleted file mode 100644
index 9c1171712..000000000
--- a/debian/patches/057_nx-X11_sanitize-eventmasks.full.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-Description: Create Windows and fix drawing issues on Big Endian 64bit systems
-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));
-
diff --git a/debian/patches/series b/debian/patches/series
index ef4671ef7..fed95824d 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,4 +1,3 @@
-057_nx-X11_sanitize-eventmasks.full.patch
101_nxagent_set-rgb-path.full.patch
102_xserver-xext_set-securitypolicy-path.full.patch
103_nxagent_set-X0-config-path.full.patch
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
index 9957a7dfd..f0ce4dacf 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
@@ -1665,7 +1665,10 @@ N/A
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));
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Window.c b/nx-X11/programs/Xserver/hw/nxagent/Window.c
index 35a35984a..2ba37a550 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Window.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Window.c
@@ -327,7 +327,10 @@ FIXME: We need to set save under on the real display?
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 @@ FIXME: Do we need to set save unders attribute here?
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 @@ void nxagentSetTopLevelEventMask(pWin)
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);
}