From 03544b3ab661d3e26a806879be38331ff42e0030 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sun, 29 Dec 2019 13:15:30 +0100 Subject: Error.c: make nxagentClientsLogName a pointer no more hardcoded string length --- nx-X11/programs/Xserver/hw/nxagent/Args.c | 12 +++++++++++- nx-X11/programs/Xserver/hw/nxagent/Error.c | 19 ++++++++++--------- nx-X11/programs/Xserver/hw/nxagent/Error.h | 3 +-- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c index 339c6d85b..0336be822 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Args.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c @@ -1296,7 +1296,17 @@ static void nxagentParseSingleOption(char *name, char *value) } else if (strcmp(name, "clients") == 0) { - snprintf(nxagentClientsLogName, NXAGENTCLIENTSLOGNAMELENGTH, "%s", value); + char *new = strdup(value); + if (new) + { + SAFE_free(nxagentClientsLogName); + nxagentClientsLogName = new; + } + else + { + fprintf(stderr, "Warning: Ignoring option [%s] because of memory problems\n", + validateString(name)); + } return; } else if (strcmp(name, "client") == 0) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.c b/nx-X11/programs/Xserver/hw/nxagent/Error.c index 21bc7fd02..a5d4426e9 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Error.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Error.c @@ -79,7 +79,7 @@ static int nxagentClientsLog = -1; * Clients log file name. */ -char nxagentClientsLogName[NXAGENTCLIENTSLOGNAMELENGTH] = { 0 }; +char *nxagentClientsLogName = NULL; /* * User's home. @@ -250,12 +250,12 @@ int nxagentExitHandler(const char *message) void nxagentOpenClientsLogFile(void) { - if (*nxagentClientsLogName == '\0') + if (!nxagentClientsLogName) { nxagentGetClientsPath(); } - if (nxagentClientsLogName != NULL && *nxagentClientsLogName != '\0') + if (nxagentClientsLogName && *nxagentClientsLogName != '\0') { nxagentClientsLog = open(nxagentClientsLogName, O_RDWR | O_CREAT | O_APPEND, 0600); @@ -553,7 +553,7 @@ char *nxagentGetSessionPath(void) void nxagentGetClientsPath(void) { - if (*nxagentClientsLogName == '\0') + if (!nxagentClientsLogName) { char *sessionPath = nxagentGetSessionPath(); @@ -562,16 +562,17 @@ void nxagentGetClientsPath(void) return; } - if (strlen(sessionPath) + strlen("/clients") > NXAGENTCLIENTSLOGNAMELENGTH - 1) + /* FIXME: this is currently never freed as it is thought to last + over the complete runtime. We should add a free call at shutdown + eventually... */ + int len = asprintf(&nxagentClientsLogName, "%s/clients", sessionPath); + if (len == -1) { #ifdef PANIC - fprintf(stderr, "nxagentGetClientsPath: PANIC! Invalid value for the NX clients Log File Path ''.\n"); + fprintf(stderr, "%s: PANIC! Could not alloc NX clients Log File Path.\n", __func__); #endif - return; } - - snprintf(nxagentClientsLogName, NXAGENTCLIENTSLOGNAMELENGTH, "%s/clients", sessionPath); } return; diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.h b/nx-X11/programs/Xserver/hw/nxagent/Error.h index f23385e0a..9f5cfef74 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Error.h +++ b/nx-X11/programs/Xserver/hw/nxagent/Error.h @@ -30,8 +30,7 @@ * Clients log file name. */ -#define NXAGENTCLIENTSLOGNAMELENGTH 256 -extern char nxagentClientsLogName[NXAGENTCLIENTSLOGNAMELENGTH]; +extern char *nxagentClientsLogName; extern char nxagentVerbose; -- cgit v1.2.3