From 2a4af0c74c7a167477d57dd1d065782516313c9b Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Sun, 29 Dec 2019 12:54:07 +0100 Subject: Error.c: fix format-truncation warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Error.c: In function ‘nxagentGetSessionPath’: Error.c:543:62: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 253 [-Wformat-truncation=] snprintf(nxagentSessionDir, DEFAULT_STRING_LENGTH, "%s/C-%s", rootPath, nxagentSessionId); ^~ ~~~~~~~~~~~~~~~~ Error.c:543:5: note: ‘snprintf’ output 4 or more bytes (assuming 259) into a destination of size 256 snprintf(nxagentSessionDir, DEFAULT_STRING_LENGTH, "%s/C-%s", rootPath, nxagentSessionId); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --- nx-X11/programs/Xserver/hw/nxagent/Error.c | 54 ++++++++++----------------- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 5 --- 2 files changed, 19 insertions(+), 40 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.c b/nx-X11/programs/Xserver/hw/nxagent/Error.c index 6b91ea94d..21bc7fd02 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Error.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Error.c @@ -97,7 +97,7 @@ static char nxagentRootDir[DEFAULT_STRING_LENGTH] = { 0 }; * Session log Directory. */ -static char nxagentSessionDir[DEFAULT_STRING_LENGTH] = { 0 }; +static char *nxagentSessionDir = NULL; void nxagentGetClientsPath(void); @@ -483,9 +483,13 @@ char *nxagentGetRootPath(void) return rootPath; } +/* + * returns a pointer to the static nxagentSessionDir. The caller must not free + * this pointer! + */ char *nxagentGetSessionPath(void) { - if (*nxagentSessionDir == '\0') + if (!nxagentSessionDir) { /* * If nxagentSessionId does not exist we assume that the @@ -496,7 +500,7 @@ char *nxagentGetSessionPath(void) if (*nxagentSessionId == '\0') { #ifdef TEST - fprintf(stderr, "nxagentGetSessionPath: Session id does not exist. Assuming session path NULL.\n"); + fprintf(stderr, "%s: Session id does not exist. Assuming session path NULL.\n", __func__); #endif return NULL; @@ -509,58 +513,42 @@ char *nxagentGetSessionPath(void) return NULL; } - /* FIXME: necessary? */ - snprintf(nxagentSessionDir, DEFAULT_STRING_LENGTH, "%s", rootPath); + /* FIXME: this is currently only freed if the dir cannot be created + and will last over the runtime otherwise. We should add a free call + eventually... */ + int len = asprintf(&nxagentSessionDir, "%s/C-%s", rootPath, nxagentSessionId); + SAFE_free(rootPath); - if (strlen(nxagentSessionDir) + strlen("/C-") + strlen(nxagentSessionId) > DEFAULT_STRING_LENGTH - 1) + if (len == -1) { #ifdef PANIC - fprintf(stderr, "nxagentGetSessionPath: PANIC!: Invalid value for the NX session directory '%s'.\n", - nxagentSessionDir); + fprintf(stderr, "%s: PANIC!: Could not alloc sessiondir string'.\n", __func__); #endif - SAFE_free(rootPath); - return NULL; } - snprintf(nxagentSessionDir, DEFAULT_STRING_LENGTH, "%s/C-%s", rootPath, nxagentSessionId); - - SAFE_free(rootPath); - struct stat dirStat; if ((stat(nxagentSessionDir, &dirStat) == -1) && (errno == ENOENT)) { if (mkdir(nxagentSessionDir, 0777) < 0 && (errno != EEXIST)) { #ifdef PANIC - fprintf(stderr, "nxagentGetSessionPath: PANIC! Can't create directory '%s'. Error is %d '%s'.\n", + fprintf(stderr, "%s: PANIC! Can't create directory '%s'. Error is %d '%s'.\n", __func__, nxagentSessionDir, errno, strerror(errno)); #endif + SAFE_free(nxagentSessionDir); return NULL; } } #ifdef TEST - fprintf(stderr, "nxagentGetSessionPath: NX session is '%s'.\n", - nxagentSessionDir); - #endif - - } - - char *sessionPath = strdup(nxagentSessionDir); - - if (sessionPath == NULL) - { - #ifdef PANIC - fprintf(stderr, "nxagentGetSessionPath:: PANIC! Can't allocate memory for the session path.\n"); + fprintf(stderr, "%s: NX session is '%s'.\n", __func__, nxagentSessionDir); #endif - - return NULL; } - return sessionPath; + return nxagentSessionDir; } void nxagentGetClientsPath(void) @@ -569,7 +557,7 @@ void nxagentGetClientsPath(void) { char *sessionPath = nxagentGetSessionPath(); - if (sessionPath == NULL) + if (!sessionPath) { return; } @@ -580,14 +568,10 @@ void nxagentGetClientsPath(void) fprintf(stderr, "nxagentGetClientsPath: PANIC! Invalid value for the NX clients Log File Path ''.\n"); #endif - SAFE_free(sessionPath); - return; } snprintf(nxagentClientsLogName, NXAGENTCLIENTSLOGNAMELENGTH, "%s/clients", sessionPath); - - SAFE_free(sessionPath); } return; diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index c145e4dba..695fce40d 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -1449,13 +1449,8 @@ static char* getKeyboardFilePath(void) { if ((asprintf(&keyboard_file_path, "%s/keyboard", sessionpath) == -1)) { - SAFE_free(sessionpath); FatalError("malloc for keyboard file path failed."); } - else - { - SAFE_free(sessionpath); - } } else { -- cgit v1.2.3