[X2Go-Commits] [nx-libs] 01/24: Create Windows and fix drawing issues on Big Endian 64bit systems (057_nx-X11_sanitize-eventmasks.full.patch).

git-admin at x2go.org git-admin at x2go.org
Tue Feb 10 21:50:49 CET 2015


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch 3.6.x
in repository nx-libs.

commit 2d68caca72bd36b168b36b252c8035643c69e692
Author: Mihai Moldovan <ionic at ionic.de>
Date:   Tue Feb 10 18:41:08 2015 +0100

    Create Windows and fix drawing issues on Big Endian 64bit systems (057_nx-X11_sanitize-eventmasks.full.patch).
    
      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.)
---
 .../057_nx-X11_sanitize-eventmasks.full.patch      |   70 --------------------
 debian/patches/series                              |    1 -
 nx-X11/programs/Xserver/hw/nxagent/Screen.c        |    5 +-
 nx-X11/programs/Xserver/hw/nxagent/Window.c        |   15 ++++-
 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 9c11717..0000000
--- 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 at 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 ef4671e..fed9582 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 9957a7d..f0ce4da 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 35a3598..2ba37a5 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);
   }

--
Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/nx-libs.git


More information about the x2go-commits mailing list