diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2015-02-14 16:23:43 +0100 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2015-02-14 16:23:43 +0100 |
commit | 09d2732b4e299eaa06c64b7a683529e337691c59 (patch) | |
tree | 3a07c4a95980c0f34b1d3ce2f55388dd7677c685 /debian/patches/0057_nx-X11_sanitize-eventmasks.full.patch | |
parent | 8c98a401b49506f969dc9263d9bd566e5b31a572 (diff) | |
download | nx-libs-09d2732b4e299eaa06c64b7a683529e337691c59.tar.gz nx-libs-09d2732b4e299eaa06c64b7a683529e337691c59.tar.bz2 nx-libs-09d2732b4e299eaa06c64b7a683529e337691c59.zip |
Patch system: Prepend a "0" to every patch file name in debian/patches/. Adapt only this changelog stanza to this modification.
Diffstat (limited to 'debian/patches/0057_nx-X11_sanitize-eventmasks.full.patch')
-rw-r--r-- | debian/patches/0057_nx-X11_sanitize-eventmasks.full.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/debian/patches/0057_nx-X11_sanitize-eventmasks.full.patch b/debian/patches/0057_nx-X11_sanitize-eventmasks.full.patch new file mode 100644 index 000000000..9c1171712 --- /dev/null +++ b/debian/patches/0057_nx-X11_sanitize-eventmasks.full.patch @@ -0,0 +1,70 @@ +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)); + |