From 39bf8d9d723c7e1fe39694e9d0da164692bcbdf9 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 9 Jan 2020 00:13:23 +0100 Subject: Rootless.c: undo overzealous scope improvement It is better to create the values array once and not on every iteration.. --- nx-X11/programs/Xserver/hw/nxagent/Rootless.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'nx-X11/programs/Xserver/hw/nxagent/Rootless.c') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c index 2adb254f6..77843b851 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c @@ -332,17 +332,17 @@ void nxagentRootlessRestack(unsigned long children[], unsigned int nchildren) WindowPtr pWin = screenInfo.screens[0]->root -> firstChild; + XID values[2] = {0, (XID) Above}; + for (int i = ntoplevel; i-- && pWin; pWin = toplevel[i] -> nextSib) { - XID values[2] = {0, (XID) Above}; - if (toplevel[i] != pWin) { Mask mask = CWSibling | CWStackMode; values[0] = pWin -> drawable.id; ClientPtr pClient = wClient(toplevel[i]); nxagentScreenTrap = 1; - ConfigureWindow(toplevel[i], mask, (XID *) values, pClient); + ConfigureWindow(toplevel[i], mask, values, pClient); nxagentScreenTrap = 0; #ifdef TEST -- cgit v1.2.3 From b7169bdcaf320e219dec23e79882176bc4b69d4c Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 18 Jan 2020 15:24:20 +0100 Subject: nxagent: make all traps Booleans and use True/False instead of 1/0 --- nx-X11/programs/Xserver/hw/nxagent/Rootless.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'nx-X11/programs/Xserver/hw/nxagent/Rootless.c') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c index 77843b851..da386d845 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c @@ -341,9 +341,9 @@ void nxagentRootlessRestack(unsigned long children[], unsigned int nchildren) Mask mask = CWSibling | CWStackMode; values[0] = pWin -> drawable.id; ClientPtr pClient = wClient(toplevel[i]); - nxagentScreenTrap = 1; + nxagentScreenTrap = True; ConfigureWindow(toplevel[i], mask, values, pClient); - nxagentScreenTrap = 0; + nxagentScreenTrap = False; #ifdef TEST fprintf(stderr, "%s: Restacked window [%p].\n", __func__, (void*) toplevel[i]); -- cgit v1.2.3 From 9b56675dd10aee122c2a6a0c2351b8199a4aa3ba Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sat, 25 Jan 2020 22:55:00 +0100 Subject: Rootless.c: fix common realloc mistake As reported by static analyzer: (error) Common realloc mistake: 'ptr' nulled but not freed upon failure Attributes ArcticaProject/nx-libs#905 --- nx-X11/programs/Xserver/hw/nxagent/Rootless.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'nx-X11/programs/Xserver/hw/nxagent/Rootless.c') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c index da386d845..b0fda2fa2 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c @@ -151,10 +151,9 @@ void nxagentRootlessAddTopLevelWindow(WindowPtr pWin, Window w) if (topLevelParentMap.next == topLevelParentMap.size) { - TopLevelParentRec *ptr = topLevelParentMap.elt; size_t size = (topLevelParentMap.size += TOP_LEVEL_TABLE_UNIT); - ptr = realloc(ptr, size * sizeof(TopLevelParentRec)); + TopLevelParentRec *ptr = realloc(topLevelParentMap.elt, size * sizeof(TopLevelParentRec)); if (ptr == NULL) { -- cgit v1.2.3 From fb6e43e30f011c6b40932d148f2162e6a08a1584 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 23 Apr 2020 21:07:52 +0200 Subject: Rootless.c: add some comments --- nx-X11/programs/Xserver/hw/nxagent/Rootless.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'nx-X11/programs/Xserver/hw/nxagent/Rootless.c') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c index b0fda2fa2..c62db115a 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c @@ -417,6 +417,11 @@ int nxagentExportAllProperty(WindowPtr pWin) return total; } +/* + * Export a property from an agent window to the corresponding window + * on the real X server This is e.g. called if a client changes a + * property. + */ int nxagentExportProperty(WindowPtr pWin, Atom property, Atom type, @@ -792,6 +797,11 @@ int nxagentExportProperty(WindowPtr pWin, return export; } +/* + * Import a property from the proxy window on the real X server into + * the agent's corresponding window. This is e.g. called on reception + * of a property change event on the real X server. + */ void nxagentImportProperty(Window window, XlibAtom property, XlibAtom type, @@ -842,6 +852,7 @@ void nxagentImportProperty(Window window, /* * We settle a property size limit of 256K beyond which we simply * ignore them. + * FIXME: where's this checked/set/enforced/whatever? */ Atom typeL = nxagentRemoteToLocalAtom(type); -- cgit v1.2.3 From 8604b18e03557f145be2218bf89fa2597cee1a68 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 23 Apr 2020 21:08:49 +0200 Subject: Rootless.c: improve TEST output more output, correct format specifiers --- nx-X11/programs/Xserver/hw/nxagent/Rootless.c | 28 +++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'nx-X11/programs/Xserver/hw/nxagent/Rootless.c') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c index c62db115a..b63d40802 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c @@ -724,7 +724,7 @@ int nxagentExportProperty(WindowPtr pWin, else { #ifdef TEST - fprintf(stderr, "%s: Property [%u] format [%i] units [%lu].\n", __func__, + fprintf(stderr, "%s: Property [%lu] format [%i] units [%lu].\n", __func__, propertyX, format, nUnits); #endif @@ -826,7 +826,7 @@ void nxagentImportProperty(Window window, if (pWin == NULL) { #ifdef TEST - fprintf(stderr, "%s: Failed to look up remote window [0x%x] property [%d] exiting.\n", + fprintf(stderr, "%s: Failed to look up remote window [0x%x] property [%ld] exiting.\n", __func__, window, property); #endif @@ -838,15 +838,15 @@ void nxagentImportProperty(Window window, if (!ValidAtom(propertyL)) { #ifdef TEST - fprintf(stderr, "%s: Failed to convert remote property atom.\n", __func__); + fprintf(stderr, "%s: Failed to convert remote property atom [%ld].\n", __func__, property); #endif return; } #ifdef TEST - fprintf(stderr, "%s: Window [0x%x] property [%d]: [%s]\n", __func__, - window, property, validateString(NameForAtom(propertyL))); + fprintf(stderr, "%s: Window [0x%x] property: remote [%ld][%s] local [%d]\n", __func__, + window, property, validateString(NameForAtom(propertyL)), propertyL); #endif /* @@ -858,10 +858,14 @@ void nxagentImportProperty(Window window, Atom typeL = nxagentRemoteToLocalAtom(type); const char *typeS = NameForAtom(typeL); + #ifdef TEST + fprintf(stderr, "%s: type: remote [%ld] local [%d][%s].\n", __func__, type, typeL, validateString(typeS)); + #endif + if (buffer == NULL && (nitems > 0)) { #ifdef WARNING - fprintf(stderr, "%s: Failed to retrieve remote property [%ld] [%s] on Window [%ld]\n", __func__, + fprintf(stderr, "%s: Failed to retrieve remote property [%ld] [%s] on window [%ld]\n", __func__, (long int) property, validateString(NameForAtom(propertyL)), (long int) window); #endif } @@ -874,7 +878,7 @@ void nxagentImportProperty(Window window, else if (!ValidAtom(typeL)) { #ifdef WARNING - fprintf(stderr, "%s: Failed to convert remote atoms [%ld].\n", __func__, + fprintf(stderr, "%s: Failed to convert remote atom [%ld].\n", __func__, (long int) type); #endif } @@ -1079,7 +1083,7 @@ void nxagentImportProperty(Window window, if (import) { #ifdef TEST - fprintf(stderr, "%s: ChangeProperty on window [0x%x] property [%d] type [%s]" + fprintf(stderr, "%s: ChangeProperty on window [0x%x] property [%ld] type [%s]" " nitems [%ld] format [%d]\n", __func__, window, property, typeS, nitems, format); #endif @@ -1090,7 +1094,7 @@ void nxagentImportProperty(Window window, else { #ifdef TEST - fprintf(stderr, "%s: WARNING! Ignored ChangeProperty on window [0x%x] property [%d] type [%s]" + fprintf(stderr, "%s: WARNING! Ignored ChangeProperty on window [0x%x] property [%ld] type [%s]" " ntems [%ld] format [%d]\n", __func__, window, property, validateString(typeS), nitems, format); #endif @@ -1136,7 +1140,7 @@ void nxagentRemovePropertyFromList(void) struct nxagentPropertyRec *tmp = nxagentPropertyList.first; #ifdef TEST - fprintf(stderr, "%s: Property [%d] on Window [0x%x] to list, list size is [%d].\n", __func__, + fprintf(stderr, "%s: Property [%ld] on Window [0x%x] to list, list size is [%d].\n", __func__, nxagentPropertyList.first -> property, nxagentPropertyList.first -> window, nxagentPropertyList.size); #endif @@ -1172,7 +1176,7 @@ void nxagentAddPropertyToList(XlibAtom property, WindowPtr pWin) } #ifdef TEST - fprintf(stderr, "%s: Adding record Property [%d] - Window [0x%x][%p] to list, list" + fprintf(stderr, "%s: Adding record Property [%ld] - Window [0x%x][%p] to list, list" " size is [%d].\n", __func__, property, nxagentWindow(pWin), (void*) pWin, nxagentPropertyList.size); #endif @@ -1218,7 +1222,7 @@ Bool nxagentNotifyMatchChangeProperty(void *p) if (first) { - fprintf(stderr, "%s: First element on list is window [0x%x] property [%d] list size is [%d].\n", __func__, + fprintf(stderr, "%s: First element on list is window [0x%x] property [%ld] list size is [%d].\n", __func__, first -> window, first -> property, nxagentPropertyList.size); } else -- cgit v1.2.3 From 5c99ec51ad000189a30ad9a19326bff7b12adbcf Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 23 Apr 2020 21:10:06 +0200 Subject: Rootless.c: do not import private properties In rootless mode some properties are private (or internal or adminitrative). They are only required for the windows on the real X server side that represent nxagent's windows. Those properties should never be cloned from there to the the nxagent windows so we filter them. Fixes ArcticaProject/nx-libs#920 --- nx-X11/programs/Xserver/hw/nxagent/Rootless.c | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'nx-X11/programs/Xserver/hw/nxagent/Rootless.c') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c index b63d40802..3bd0b7c25 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c @@ -39,6 +39,7 @@ #include "Atoms.h" #include "Trap.h" #include "Utils.h" +#include "Atoms.h" #include "compext/Compext.h" @@ -890,6 +891,41 @@ void nxagentImportProperty(Window window, import = True; } + else if (property == nxagentAtoms[0]) /* NX_IDENTITY */ + { + #ifdef WARNING + fprintf(stderr, "%s: not importing private [%ld][NXDARWIN].\n", __func__, + (long int) property); + #endif + } + else if (property == nxagentAtoms[5]) /* NX_CUT_BUFFER_SERVER */ + { + #ifdef WARNING + fprintf(stderr, "%s: not importing private [%ld][NX_CUT_BUFFER_SERVER].\n", __func__, + (long int) property); + #endif + } + else if (property == nxagentAtoms[8]) /* NX_AGENT_SIGNATURE */ + { + #ifdef WARNING + fprintf(stderr, "%s: not importing private [%ld][NX_AGENT_SIGNATURE].\n", __func__, + (long int) property); + #endif + } + else if (property == nxagentAtoms[9]) /* NXDARWIN */ + { + #ifdef TEST + fprintf(stderr, "%s: not importing private [%ld][NXDARWIN].\n", __func__, + (long int) property); + #endif + } + else if (property == nxagentAtoms[15]) /* NX_SELTRANS_FROM_AGENT */ + { + #ifdef TEST + fprintf(stderr, "%s: not importing private [%ld][NX_SELTRANS_FROM_AGENT].\n", __func__, + (long int) property); + #endif + } else if (strcmp(typeS, "STRING") == 0 || strcmp(typeS, "UTF8_STRING") == 0 || strcmp(typeS, "CARDINAL") == 0 || -- cgit v1.2.3