aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Sibiller <uli42@gmx.de>2020-01-07 20:53:20 +0100
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2020-05-07 12:55:04 +0200
commitbed0d6ce2e3fac3bb85a8dae91ab6ef72e501e28 (patch)
treebb3e7045b6c5d49d528dcadbf6e7ad2593d4d16b
parent8a5c1d3d89e14959ad9aa74d24e3544b50ef37e5 (diff)
downloadnx-libs-bed0d6ce2e3fac3bb85a8dae91ab6ef72e501e28.tar.gz
nx-libs-bed0d6ce2e3fac3bb85a8dae91ab6ef72e501e28.tar.bz2
nx-libs-bed0d6ce2e3fac3bb85a8dae91ab6ef72e501e28.zip
Atoms.c: always duplicate strings before storing them in privAtomMap
Otherwise we will never be able to free the list because we do not know if free() is allowed or not.
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Atoms.c37
1 files changed, 11 insertions, 26 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Atoms.c b/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
index b2d7cdc6f..761ab1b4f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
@@ -374,7 +374,7 @@ static unsigned int privAtomMapSize = 0;
static unsigned int privLastAtom = 0;
static void nxagentExpandCache(void);
-static void nxagentWriteAtom(Atom, XlibAtom, const char*, Bool);
+static void nxagentWriteAtom(Atom, XlibAtom, const char*);
static AtomMap* nxagentFindAtomByRemoteValue(XlibAtom);
static AtomMap* nxagentFindAtomByLocalValue(Atom);
static AtomMap* nxagentFindAtomByName(char*, unsigned);
@@ -396,31 +396,16 @@ static void nxagentExpandCache(void)
* consequent allocation, then cache the atom-couple.
*/
-static void nxagentWriteAtom(Atom local, XlibAtom remote, const char *string, Bool duplicate)
+static void nxagentWriteAtom(Atom local, XlibAtom remote, const char *string)
{
- const char *s;
+ const char *s = strdup(string);
- /*
- * We could remove this string duplication if we knew for sure that
- * the server will not reset, since only at reset the dix layer
- * frees all the atom names.
- */
-
- if (duplicate)
- {
- s = strdup(string);
-
- #ifdef WARNING
- if (s == NULL)
- {
- fprintf(stderr, "nxagentWriteAtom: Malloc failed.\n");
- }
- #endif
- }
- else
+ #ifdef WARNING
+ if (s == NULL)
{
- s = string;
+ fprintf(stderr, "nxagentWriteAtom: Malloc failed.\n");
}
+ #endif
if (privLastAtom == privAtomMapSize)
{
@@ -515,7 +500,7 @@ static int nxagentInitAtomMap(char **atomNameList, int count, Atom *atomsRet)
if (ValidAtom(local))
{
- nxagentWriteAtom(local, atom_list[i], name_list[i], False);
+ nxagentWriteAtom(local, atom_list[i], name_list[i]);
}
else
{
@@ -673,7 +658,7 @@ XlibAtom nxagentMakeAtom(char *string, unsigned int length, Bool Makeit)
}
else
{
- nxagentWriteAtom(local, remote, string, True);
+ nxagentWriteAtom(local, remote, string);
return remote;
}
@@ -732,7 +717,7 @@ XlibAtom nxagentLocalToRemoteAtom(Atom local)
return None;
}
- nxagentWriteAtom(local, remote, string, True);
+ nxagentWriteAtom(local, remote, string);
#ifdef TEST
fprintf(stderr, "%s: local [%d (%s)] -> remote [%d]\n", __func__, local, string, remote);
@@ -809,7 +794,7 @@ Atom nxagentRemoteToLocalAtom(XlibAtom remote)
local = None;
}
- nxagentWriteAtom(local, remote, string, True);
+ nxagentWriteAtom(local, remote, string);
#ifdef TEST
fprintf(stderr, "%s: remote [%d (%s)] -> local [%d]\n", __func__, remote, string, local);