aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Args.c120
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Args.h16
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Dialog.c22
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Dialog.h6
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Display.c60
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Error.c77
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Error.h3
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Events.c1
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Font.c66
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Keyboard.c40
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Keystroke.c4
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c14
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Reconnect.c2
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Screen.c26
14 files changed, 182 insertions, 275 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c
index cccfd40e0..14f696e2d 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
@@ -126,15 +126,15 @@ extern char dispatchExceptionAtReset;
extern const char *__progname;
-char nxagentDisplayName[1024];
+char nxagentDisplayName[NXAGENTDISPLAYNAMELENGTH];
Bool nxagentSynchronize = False;
Bool nxagentRealWindowProp = False;
-char nxagentShadowDisplayName[1024] = {0};
+char nxagentShadowDisplayName[NXAGENTSHADOWDISPLAYNAMELENGTH] = {0};
-char nxagentWindowName[256];
-char nxagentDialogName[256];
-char nxagentSessionId[256] = {0};
+char nxagentWindowName[NXAGENTWINDOWNAMELENGTH];
+char nxagentDialogName[NXAGENTDIALOGNAMELENGTH];
+char nxagentSessionId[NXAGENTSESSIONIDLENGTH] = {0};
char *nxagentOptionsFilenameOrString;
Bool nxagentFullGeneration = False;
@@ -215,14 +215,10 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{
if ((!strcmp(argv[j], "-display")) && (j + 1 < argc))
{
- envOptions = malloc(strlen(argv[j + 1]) + 1);
+ envOptions = strdup(argv[j + 1]);
- if (envOptions != NULL)
- {
- envOptions = strcpy(envOptions, argv[j + 1]);
- }
#ifdef WARNING
- else
+ if (envOptions == NULL)
{
fprintf(stderr, "ddxProcessArgument: WARNING! failed string allocation.\n");
}
@@ -234,14 +230,10 @@ int ddxProcessArgument(int argc, char *argv[], int i)
if ((envOptions == NULL) && (envDisplay != NULL))
{
- envOptions = malloc(strlen(envDisplay) + 1);
+ envOptions = strdup(envDisplay);
- if (envOptions != NULL)
- {
- envOptions = strcpy(envOptions, envDisplay);
- }
#ifdef WARNING
- else
+ if (envOptions == NULL)
{
fprintf(stderr, "ddxProcessArgument: WARNING! failed string allocation.\n");
}
@@ -326,10 +318,7 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{
if (++i < argc)
{
- strncpy(nxagentDisplayName, argv[i], 1023);
-
- nxagentDisplayName[1023] = '\0';
-
+ snprintf(nxagentDisplayName, NXAGENTDISPLAYNAMELENGTH, "%s", argv[i]);
return 2;
}
@@ -340,10 +329,7 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{
if (++i < argc)
{
- strncpy(nxagentSessionId, argv[i], 255);
-
- *(nxagentSessionId + 255) = '\0';
-
+ snprintf(nxagentSessionId, NXAGENTSESSIONIDLENGTH, "%s", argv[i]);
return 2;
}
@@ -360,35 +346,13 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{
if (++i < argc)
{
- int size;
-
free(nxagentOptionsFilenameOrString);
nxagentOptionsFilenameOrString = NULL;
- if ((size = strlen(argv[i])) < 1024)
- {
- if ((nxagentOptionsFilenameOrString = malloc(size + 1)) == NULL)
- {
- FatalError("malloc failed");
- }
-
- strncpy(nxagentOptionsFilenameOrString, argv[i], size);
-
- nxagentOptionsFilenameOrString[size] = '\0';
- }
- else
+ if (-1 == asprintf(&nxagentOptionsFilenameOrString, "%s", argv[i]))
{
- /*
- * It is useless to store the file name
- * that has just been truncated.
- */
-
- #ifdef WARNING
- fprintf(stderr, "ddxProcessArgument: WARNING! Option file name "
- "too long. It will be ignored.\n");
- #endif
+ FatalError("malloc failed");
}
-
return 2;
}
@@ -670,10 +634,7 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{
if (++i < argc)
{
- strncpy(nxagentWindowName, argv[i], 255);
-
- *(nxagentWindowName + 255) = '\0';
-
+ snprintf(nxagentWindowName, NXAGENTWINDOWNAMELENGTH, "%s", argv[i]);
return 2;
}
@@ -727,34 +688,14 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{
if (++i < argc)
{
- int size;
-
free(nxagentKeyboard);
nxagentKeyboard = NULL;
- if ((size = strlen(argv[i])) < 256)
- {
- if ((nxagentKeyboard = malloc(size + 1)) == NULL)
- {
- FatalError("malloc failed");
- }
-
- strncpy(nxagentKeyboard, argv[i], size);
-
- nxagentKeyboard[size] = '\0';
- }
- #ifdef WARNING
- else
+ nxagentKeyboard = strdup(argv[i]);
+ if (nxagentKeyboard == NULL)
{
- /*
- * it is useless to remember a kbtype
- * option that has just been truncated.
- */
-
- fprintf(stderr, "ddxProcessArgument: WARNING! Option [%s] too long. "
- "It will be ignored.\n", argv[i]);
+ FatalError("malloc failed");
}
- #endif
return 2;
}
@@ -903,15 +844,13 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{
if (++i < argc)
{
- strncpy(nxagentShadowDisplayName, argv[i], 1023);
+ snprintf(nxagentShadowDisplayName, NXAGENTSHADOWDISPLAYNAMELENGTH, "%s", argv[i]);
if (strcmp(nxagentShadowDisplayName, "") == 0)
{
FatalError("Invalid shadow display option");
}
- *(nxagentShadowDisplayName + 1023) = '\0';
-
return 2;
}
@@ -1315,7 +1254,7 @@ static void nxagentParseOptions(char *name, char *value)
}
else if (strcmp(name, "clients") == 0)
{
- strcpy(nxagentClientsLogName, value);
+ snprintf(nxagentClientsLogName, NXAGENTCLIENTSLOGNAMELENGTH, "%s", value);
return;
}
@@ -1780,9 +1719,7 @@ N/A
if (*nxagentWindowName == '\0')
{
- strncpy(nxagentWindowName, "NX", 255);
-
- *(nxagentWindowName + 255) = '\0';
+ snprintf(nxagentWindowName, NXAGENTWINDOWNAMELENGTH, "NX");
}
/*
@@ -2161,31 +2098,24 @@ void ddxUseMsg()
static int nxagentGetDialogName()
{
- strcpy(nxagentDialogName, "NX");
-
- *(nxagentDialogName + 255) = '\0';
-
if (*nxagentSessionId != '\0')
{
int length = strlen(nxagentSessionId);
- strcpy(nxagentDialogName, "NX - ");
-
+ /* if the session id contains an MD5 hash in a well-known format cut it off */
if (length > (MD5_LENGTH * 2 + 1) &&
*(nxagentSessionId + (length - (MD5_LENGTH * 2 + 1))) == '-')
{
- strncat(nxagentDialogName, nxagentSessionId, length - (MD5_LENGTH * 2 + 1));
- }
- else
- {
- strncat(nxagentDialogName, nxagentSessionId, 250);
+ length -= (MD5_LENGTH * 2 + 1);
}
- *(nxagentSessionId + 255) = '\0';
+ snprintf(nxagentDialogName, NXAGENTDIALOGNAMELENGTH, "NX - %.*s", length, nxagentSessionId);
return 1;
}
+ snprintf(nxagentDialogName, NXAGENTDIALOGNAMELENGTH, "NX");
+
return 0;
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.h b/nx-X11/programs/Xserver/hw/nxagent/Args.h
index d60488c0d..a3f7e349b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.h
@@ -52,11 +52,17 @@ struct UserGeometry{
extern Bool nxagentUseNXTrans;
-extern char nxagentSessionId[];
-extern char nxagentDisplayName[];
-extern char nxagentShadowDisplayName[];
-extern char nxagentWindowName[];
-extern char nxagentDialogName[];
+#define NXAGENTSESSIONIDLENGTH 256
+#define NXAGENTDISPLAYNAMELENGTH 1024
+#define NXAGENTSHADOWDISPLAYNAMELENGTH 1024
+#define NXAGENTWINDOWNAMELENGTH 256
+#define NXAGENTDIALOGNAMELENGTH 256
+
+extern char nxagentSessionId[NXAGENTSESSIONIDLENGTH];
+extern char nxagentDisplayName[NXAGENTDISPLAYNAMELENGTH];
+extern char nxagentShadowDisplayName[NXAGENTSHADOWDISPLAYNAMELENGTH];
+extern char nxagentWindowName[NXAGENTWINDOWNAMELENGTH];
+extern char nxagentDialogName[NXAGENTDIALOGNAMELENGTH];
extern Bool nxagentSynchronize;
extern Bool nxagentRealWindowProp;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Dialog.c b/nx-X11/programs/Xserver/hw/nxagent/Dialog.c
index b7852a0ac..c09618693 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Dialog.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Dialog.c
@@ -66,9 +66,9 @@ int nxagentDisableDeferModePid = 0;
static int nxagentFailedReconnectionDialogPid = 0;
-char nxagentPulldownWindow[16];
+char nxagentPulldownWindow[NXAGENTPULLDOWNWINDOWLENGTH];
-char nxagentFailedReconnectionMessage[256];
+char nxagentFailedReconnectionMessage[NXAGENTFAILEDRECONNECTIONMESSAGELENGTH];
void nxagentResetDialog(int pid)
{
@@ -279,16 +279,13 @@ void nxagentLaunchDialog(DialogType dialogType)
if (dialogType == DIALOG_FAILED_RECONNECTION)
{
- strncpy(dialogDisplay, nxagentDisplayName, 255);
+ snprintf(dialogDisplay, sizeof(dialogDisplay), "%s", nxagentDisplayName);
}
else
{
- strcpy(dialogDisplay, ":");
- strncat(dialogDisplay, display, 254);
+ snprintf(dialogDisplay, sizeof(dialogDisplay), ":%s", display);
}
- *(dialogDisplay + 255) = '\0';
-
/*
* We don't want to receive SIGCHLD
* before we store the child pid.
@@ -308,7 +305,7 @@ void nxagentLaunchDialog(DialogType dialogType)
DECODE_DIALOG_TYPE(dialogType), *pid, dialogDisplay);
#endif
- *dialogDisplay = '\0';
+ dialogDisplay[0] = '\0';
/*
* Restore the previous set of
@@ -320,8 +317,7 @@ void nxagentLaunchDialog(DialogType dialogType)
void nxagentPulldownDialog(Window wid)
{
- snprintf(nxagentPulldownWindow, 15, "%ld", (long int) wid);
- nxagentPulldownWindow[15] = 0;
+ snprintf(nxagentPulldownWindow, NXAGENTPULLDOWNWINDOWLENGTH, "%ld", (long int) wid);
#ifdef TEST
fprintf(stderr, "nxagentPulldownDialog: Going to launch pulldown "
@@ -330,7 +326,7 @@ void nxagentPulldownDialog(Window wid)
nxagentLaunchDialog(DIALOG_PULLDOWN);
- nxagentPulldownWindow[0] = 0;
+ nxagentPulldownWindow[0] = '\0';
}
void nxagentFailedReconnectionDialog(int alert, char *error)
@@ -372,9 +368,7 @@ void nxagentFailedReconnectionDialog(int alert, char *error)
int status;
int options = 0;
- snprintf(nxagentFailedReconnectionMessage, 255, "Reconnection failed: %s", error);
-
- *(nxagentFailedReconnectionMessage + 255) = '\0';
+ snprintf(nxagentFailedReconnectionMessage, NXAGENTFAILEDRECONNECTIONMESSAGELENGTH, "Reconnection failed: %s", error);
nxagentLaunchDialog(DIALOG_FAILED_RECONNECTION);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Dialog.h b/nx-X11/programs/Xserver/hw/nxagent/Dialog.h
index 133dee242..ffcdf48f2 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Dialog.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Dialog.h
@@ -55,9 +55,11 @@ extern int nxagentDisableRandRModeDialogPid;
extern int nxagentEnableDeferModePid;
extern int nxagentDisableDeferModePid;
-extern char nxagentFailedReconnectionMessage[];
+#define NXAGENTFAILEDRECONNECTIONMESSAGELENGTH 256
+extern char nxagentFailedReconnectionMessage[NXAGENTFAILEDRECONNECTIONMESSAGELENGTH];
-extern char nxagentPulldownWindow[];
+#define NXAGENTPULLDOWNWINDOWLENGTH 16
+extern char nxagentPulldownWindow[NXAGENTPULLDOWNWINDOWLENGTH];
extern void nxagentLaunchDialog(DialogType type);
extern void nxagentResetDialog(int pid);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Display.c b/nx-X11/programs/Xserver/hw/nxagent/Display.c
index 4930baee2..4f2e3c6d8 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c
@@ -1150,9 +1150,7 @@ void nxagentOpenDisplay(int argc, char *argv[])
if (*nxagentDisplayName == '\0')
{
- strncpy(nxagentDisplayName, XDisplayName(NULL), 1023);
-
- nxagentDisplayName[1023] = '\0';
+ snprintf(nxagentDisplayName, NXAGENTDISPLAYNAMELENGTH, "%s", XDisplayName(NULL));
}
nxagentCloseDisplay();
@@ -1817,12 +1815,10 @@ FIXME: Is this needed?
}
static FILE *nxagentLookForIconFile(char *iconName, const char *permission,
- char *return_path)
+ char *return_path, int return_path_size)
{
char *path;
- char *end;
char singlePath[PATH_MAX];
- int breakLoop;
FILE *fptr = NULL;
#ifdef WIN32
@@ -1838,43 +1834,53 @@ static FILE *nxagentLookForIconFile(char *iconName, const char *permission,
return NULL;
}
- for(breakLoop = 0; breakLoop == 0 && fptr == NULL; )
+ for (char *end = path; end != NULL && fptr == NULL; )
{
end = strchr(path, separator);
+ /* separator found */
if (end != NULL)
{
- strncpy(singlePath, path, (unsigned long)(end - path));
-
- singlePath[(unsigned long)(end - path)] = 0;
+ if ((end - path) > sizeof(singlePath) - 1)
+ {
+ fprintf(stderr, "Warning: PATH component too long - ignoring it.\n");
+ path = end + 1;
+ continue;
+ }
+ snprintf(singlePath, (unsigned long)(end - path + 1), "%s", path);
path = end + 1;
}
else
{
- strcpy(singlePath, path);
+ if (strlen(path) > sizeof(singlePath) - 1)
+ {
+ fprintf(stderr, "Warning: PATH component too long - ignoring it.\n");
+ return NULL;
+ }
- breakLoop = 1;
+ snprintf(singlePath, sizeof(singlePath), "%s", path);
}
- if (singlePath[strlen(singlePath)- 1] == slash[0])
+ /* cut off trailing slashes, if any */
+ while (singlePath[strlen(singlePath) - 1] == slash[0])
{
- singlePath[strlen(singlePath)- 1] = 0;
+ singlePath[strlen(singlePath) - 1] = '\0';
}
- if (strlen(singlePath) + strlen(iconName) + 1 < PATH_MAX)
+ /* append slash and icon name */
+ if (strlen(singlePath) + strlen(iconName) + 1 < sizeof(singlePath))
{
- strncat(singlePath, slash, 1);
- strcat(singlePath, iconName);
+ snprintf(singlePath + strlen(singlePath), sizeof(singlePath), "%s%s", slash, iconName);
if ((fptr = fopen(singlePath, permission)) != NULL)
{
- strcpy(return_path, singlePath);
+ snprintf(return_path, return_path_size, "%s", singlePath);
}
}
else
{
- fprintf(stderr, "Error: Path too long.\n");
+ fprintf(stderr, "Warning: Icon path too long.\n");
}
}
@@ -1898,21 +1904,21 @@ Bool nxagentMakeIcon(Display *display, Pixmap *nxIcon, Pixmap *nxMask)
*/
if(nxagentX2go)
{
- agent_icon_name=X2GOAGENT_ICON_NAME;
- agentIconData=x2goagentIconData;
+ agent_icon_name = X2GOAGENT_ICON_NAME;
+ agentIconData = x2goagentIconData;
}
else
{
- agent_icon_name=NXAGENT_ICON_NAME;
- agentIconData=nxagentIconData;
+ agent_icon_name = NXAGENT_ICON_NAME;
+ agentIconData = nxagentIconData;
}
-
- snprintf(default_path, PATH_MAX-1, "/usr/NX/share/images/%s", agent_icon_name);
+ /* FIXME: use a compile time define here, /usr/NX is a nomachine path */
+ snprintf(default_path, sizeof(default_path), "/usr/NX/share/images/%s", agent_icon_name);
if ((icon_fp = fopen(default_path, "r")) == NULL)
{
- icon_fp = nxagentLookForIconFile(agent_icon_name, "r", icon_path);
+ icon_fp = nxagentLookForIconFile(agent_icon_name, "r", icon_path, sizeof(icon_path));
if (icon_fp != NULL)
{
@@ -1924,7 +1930,7 @@ Bool nxagentMakeIcon(Display *display, Pixmap *nxIcon, Pixmap *nxMask)
{
fclose (icon_fp);
success = True;
- strcpy(icon_path, default_path);
+ snprintf(icon_path, sizeof(icon_path), "%s", default_path);
}
if (success)
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.c b/nx-X11/programs/Xserver/hw/nxagent/Error.c
index c56275922..f5fb297b3 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Error.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Error.c
@@ -78,7 +78,7 @@ static int nxagentClientsLog = -1;
* Clients log file name.
*/
-char nxagentClientsLogName[DEFAULT_STRING_LENGTH] = { 0 };
+char nxagentClientsLogName[NXAGENTCLIENTSLOGNAMELENGTH] = { 0 };
/*
* User's home.
@@ -102,7 +102,7 @@ void nxagentGetClientsPath(void);
static int nxagentPrintError(Display *dpy, XErrorEvent *event, FILE *fp);
-/* declare an error handler that does not exit when an error
+/* declare an error handler that does not exit when an error
* event is catched.
*/
@@ -118,6 +118,8 @@ int nxagentErrorHandler(Display *dpy, XErrorEvent *event)
/* copied from XlibInt.c */
/* extension stuff roughly commented out */
+/* FIXME: why? What's wrong with printing extension stuff?
+ We could drop this in favour of _XprintDefaultError then! */
static int nxagentPrintError(dpy, event, fp)
Display *dpy;
XErrorEvent *event;
@@ -138,7 +140,7 @@ static int nxagentPrintError(dpy, event, fp)
mesg, BUFSIZ);
(void) fprintf(fp, mesg, event->request_code);
if (event->request_code < 128) {
- sprintf(number, "%d", event->request_code);
+ snprintf(number, sizeof(number), "%d", event->request_code);
XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ);
} else {
/* for (ext = dpy->ext_procs;
@@ -146,7 +148,7 @@ static int nxagentPrintError(dpy, event, fp)
ext = ext->next)
;
if (ext)
- strcpy(buffer, ext->name);
+ strncpy(buffer, ext->name, BUFSIZ);
else
*/
buffer[0] = '\0';
@@ -159,7 +161,7 @@ static int nxagentPrintError(dpy, event, fp)
(void) fprintf(fp, mesg, event->minor_code);
/*
if (ext) {
- sprintf(mesg, "%s.%d", ext->name, event->minor_code);
+ snprintf(mesg, sizeof(mesg), "%s.%d", ext->name, event->minor_code);
XGetErrorDatabaseText(dpy, "XRequest", mesg, "", buffer, BUFSIZ);
(void) fprintf(fp, " (%s)", buffer);
}
@@ -171,7 +173,7 @@ static int nxagentPrintError(dpy, event, fp)
buffer[0] = '\0';
/*
for (ext = dpy->ext_procs; ext; ext = ext->next) {
- if (ext->error_string)
+ if (ext->error_string)
(*ext->error_string)(dpy, event->error_code, &ext->codes,
buffer, BUFSIZ);
if (buffer[0]) {
@@ -182,9 +184,9 @@ static int nxagentPrintError(dpy, event, fp)
ext->codes.first_error < (int)event->error_code &&
(!bext || ext->codes.first_error > bext->codes.first_error))
bext = ext;
- }
+ }
if (bext)
- sprintf(buffer, "%s.%d", bext->name,
+ snprintf(buffer, sizeof(buffer), "%s.%d", bext->name,
event->error_code - bext->codes.first_error);
else
*/
@@ -225,14 +227,14 @@ static int nxagentPrintError(dpy, event, fp)
(void) fprintf(fp, mesg, event->resourceid);
fputs("\n", fp);
}
- XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d",
+ XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d",
mesg, BUFSIZ);
fputs(" ", fp);
(void) fprintf(fp, mesg, event->serial);
- XGetErrorDatabaseText(dpy, mtype, "CurrentSerial", "Current Serial #%d",
+ /* XGetErrorDatabaseText(dpy, mtype, "CurrentSerial", "Current Serial #%d",
mesg, BUFSIZ);
fputs("\n ", fp);
- /* (void) fprintf(fp, mesg, dpy->request); */
+ (void) fprintf(fp, mesg, dpy->request); */
fputs("\n", fp);
if (event->error_code == BadImplementation) return 0;
return 1;
@@ -252,7 +254,7 @@ void nxagentOpenClientsLogFile()
nxagentGetClientsPath();
}
- if (nxagentClientsLogName != NULL && *nxagentClientsLogName !='\0')
+ if (nxagentClientsLogName != NULL && *nxagentClientsLogName != '\0')
{
nxagentClientsLog = open(nxagentClientsLogName, O_RDWR | O_CREAT | O_APPEND, 0600);
@@ -283,12 +285,12 @@ void nxagentStartRedirectToClientsLog(void)
{
if (nxagentStderrBackup == -1)
{
- nxagentStderrBackup = dup(2);
+ nxagentStderrBackup = dup(STDERR_FILENO);
}
if (nxagentStderrBackup != -1)
{
- nxagentStderrDup = dup2(nxagentClientsLog, 2);
+ nxagentStderrDup = dup2(nxagentClientsLog, STDERR_FILENO);
if (nxagentStderrDup == -1)
{
@@ -308,7 +310,7 @@ void nxagentEndRedirectToClientsLog(void)
{
if (nxagentStderrBackup != -1)
{
- nxagentStderrDup = dup2(nxagentStderrBackup, 2);
+ nxagentStderrDup = dup2(nxagentStderrBackup, STDERR_FILENO);
if (nxagentStderrDup == -1)
{
@@ -359,14 +361,14 @@ char *nxagentGetHomePath(void)
#endif
}
- strncpy(nxagentHomeDir, homeEnv, DEFAULT_STRING_LENGTH - 1);
+ snprintf(nxagentHomeDir, DEFAULT_STRING_LENGTH, "%s", homeEnv);
#ifdef TEST
fprintf(stderr, "nxagentGetHomePath: Assuming NX user's home directory '%s'.\n", nxagentHomeDir);
#endif
}
- homePath = (char*) malloc(strlen(nxagentHomeDir) + 1);
+ homePath = strdup(nxagentHomeDir);
if (homePath == NULL)
{
@@ -377,8 +379,6 @@ char *nxagentGetHomePath(void)
return NULL;
}
- strcpy(homePath, nxagentHomeDir);
-
return homePath;
}
@@ -414,10 +414,6 @@ char *nxagentGetRootPath(void)
if (homeEnv == NULL)
{
-
- #ifdef PANIC
- #endif
-
return NULL;
}
@@ -438,8 +434,7 @@ char *nxagentGetRootPath(void)
fprintf(stderr, "nxagentGetRootPath: Assuming NX root directory in '%s'.\n", homeEnv);
#endif
- strcpy(nxagentRootDir, homeEnv);
- strcat(nxagentRootDir, "/.nx");
+ snprintf(nxagentRootDir, DEFAULT_STRING_LENGTH, "%s/.nx", homeEnv);
free(homeEnv);
@@ -472,17 +467,17 @@ char *nxagentGetRootPath(void)
return NULL;
}
- strcpy(nxagentRootDir, rootEnv);
+ snprintf(nxagentRootDir, DEFAULT_STRING_LENGTH, "%s", rootEnv);
}
#ifdef TEST
fprintf(stderr, "nxagentGetRootPath: Assuming NX root directory '%s'.\n",
nxagentRootDir);
#endif
-
+
}
- rootPath = malloc(strlen(nxagentRootDir) + 1);
+ rootPath = strdup(nxagentRootDir);
if (rootPath == NULL)
{
@@ -493,8 +488,6 @@ char *nxagentGetRootPath(void)
return NULL;
}
- strcpy(rootPath, nxagentRootDir);
-
return rootPath;
}
@@ -531,9 +524,8 @@ char *nxagentGetSessionPath(void)
return NULL;
}
- strcpy(nxagentSessionDir, rootPath);
-
- free(rootPath);
+ /* FIXME: necessary? */
+ snprintf(nxagentSessionDir, DEFAULT_STRING_LENGTH, "%s", rootPath);
if (strlen(nxagentSessionDir) + strlen("/C-") + strlen(nxagentSessionId) > DEFAULT_STRING_LENGTH - 1)
{
@@ -542,12 +534,14 @@ char *nxagentGetSessionPath(void)
nxagentSessionDir);
#endif
+ free(rootPath);
+
return NULL;
}
- strcat(nxagentSessionDir, "/C-");
+ snprintf(nxagentSessionDir, DEFAULT_STRING_LENGTH, "%s/C-%s", rootPath, nxagentSessionId);
- strcat(nxagentSessionDir, nxagentSessionId);
+ free(rootPath);
if ((stat(nxagentSessionDir, &dirStat) == -1) && (errno == ENOENT))
{
@@ -569,9 +563,9 @@ char *nxagentGetSessionPath(void)
}
- sessionPath = malloc(strlen(nxagentSessionDir) + 1);
+ sessionPath = strdup(nxagentSessionDir);
- if (sessionPath == NULL)
+ if (sessionPath == NULL)
{
#ifdef PANIC
fprintf(stderr, "nxagentGetSessionPath:: PANIC! Can't allocate memory for the session path.\n");
@@ -580,9 +574,6 @@ char *nxagentGetSessionPath(void)
return NULL;
}
-
- strcpy(sessionPath, nxagentSessionDir);
-
return sessionPath;
}
@@ -598,7 +589,7 @@ void nxagentGetClientsPath()
return;
}
- if (strlen(sessionPath) + strlen("/clients") > DEFAULT_STRING_LENGTH - 1)
+ if (strlen(sessionPath) + strlen("/clients") > NXAGENTCLIENTSLOGNAMELENGTH - 1)
{
#ifdef PANIC
fprintf(stderr, "nxagentGetClientsPath: PANIC! Invalid value for the NX clients Log File Path ''.\n");
@@ -609,9 +600,7 @@ void nxagentGetClientsPath()
return;
}
- strcpy(nxagentClientsLogName, sessionPath);
-
- strcat(nxagentClientsLogName, "/clients");
+ snprintf(nxagentClientsLogName, NXAGENTCLIENTSLOGNAMELENGTH, "%s/clients", sessionPath);
free(sessionPath);
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.h b/nx-X11/programs/Xserver/hw/nxagent/Error.h
index 1d0d9a827..f23385e0a 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Error.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Error.h
@@ -30,7 +30,8 @@
* Clients log file name.
*/
-extern char nxagentClientsLogName[];
+#define NXAGENTCLIENTSLOGNAMELENGTH 256
+extern char nxagentClientsLogName[NXAGENTCLIENTSLOGNAMELENGTH];
extern char nxagentVerbose;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c
index c186c1508..0b6e0cafb 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Events.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c
@@ -2198,6 +2198,7 @@ FIXME: Don't enqueue the KeyRelease event if the key was
char *kbdargs[6];
strcpy(kbddisplay,":");
+ /* FIXME: why limit to 4? */
strncat(kbddisplay, display, 4);
kbdargs[0] = "nxkbd";
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c
index 3b35a8bff..5af88b137 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Font.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c
@@ -109,7 +109,7 @@ static void nxagentFontReconnect(FontPtr, XID, void *);
static XFontStruct *nxagentLoadBestQueryFont(Display* dpy, char *fontName, FontPtr pFont);
static XFontStruct *nxagentLoadQueryFont(register Display *dpy , char *fontName , FontPtr pFont);
int nxagentFreeFont(XFontStruct *fs);
-static Bool nxagentGetFontServerPath(char * fontServerPath);
+static Bool nxagentGetFontServerPath(char * fontServerPath, int size);
static char * nxagentMakeScalableFontName(const char *fontName, int scalableResolution);
@@ -334,10 +334,12 @@ void nxagentListRemoteAddName(const char *name, int status)
if ((nxagentRemoteFontList.list[pos] = malloc(sizeof(nxagentFontRec))))
{
- nxagentRemoteFontList.list[pos]->name = malloc(strlen(name) +1);
+ nxagentRemoteFontList.list[pos]->name = strdup(name);
if (nxagentRemoteFontList.list[pos]->name == NULL)
{
fprintf(stderr, "Font: remote list name memory allocation failed!.\n");
+ free(nxagentRemoteFontList.list[pos]);
+ nxagentRemoteFontList.list[pos] = NULL;
return;
}
}
@@ -346,7 +348,6 @@ void nxagentListRemoteAddName(const char *name, int status)
fprintf(stderr, "Font: remote list record memory allocation failed!.\n");
return;
}
- strcpy(nxagentRemoteFontList.list[pos]->name,name);
nxagentRemoteFontList.list[pos]->status = status;
nxagentRemoteFontList.length++;
@@ -733,7 +734,7 @@ static XFontStruct *nxagentLoadBestQueryFont(Display* dpy, char *fontName, FontP
{
XFontStruct *fontStruct;
- char *substFontBuf;
+ char substFontBuf[512];;
/* X Logical Font Description Conventions
* require 14 fields in the font names.
@@ -767,12 +768,9 @@ static XFontStruct *nxagentLoadBestQueryFont(Display* dpy, char *fontName, FontP
fprintf(stderr, "nxagentLoadBestQueryFont: Searching font '%s' .\n", fontName);
#endif
- substFontBuf = (char *) malloc(sizeof(char) * 512);
-
-
numFontFields = nxagentSplitString(fontName, fontNameFields, FIELDS + 1, "-");
- memcpy(substFontBuf, "fixed\0", strlen("fixed") + 1);
+ snprintf(substFontBuf, sizeof(substFontBuf), "%s", "fixed");
if (numFontFields <= FIELDS)
{
@@ -831,8 +829,7 @@ static XFontStruct *nxagentLoadBestQueryFont(Display* dpy, char *fontName, FontP
/* Found more accurate font */
weight = tempWeight;
- memcpy(substFontBuf, nxagentRemoteFontList.list[i]->name, strlen(nxagentRemoteFontList.list[i]->name));
- substFontBuf[strlen(nxagentRemoteFontList.list[i]->name)] = '\0';
+ snprintf(substFontBuf, sizeof(substFontBuf), "%s", nxagentRemoteFontList.list[i]->name);
#ifdef NXAGENT_RECONNECT_FONT_DEBUG
fprintf(stderr, "nxagentLoadBestQueryFont: Weight '%d' of more accurate font '%s' .\n", weight, substFontBuf);
@@ -856,8 +853,6 @@ static XFontStruct *nxagentLoadBestQueryFont(Display* dpy, char *fontName, FontP
fontStruct = nxagentLoadQueryFont(dpy, substFontBuf, pFont);
- free (substFontBuf);
-
for (j = 0; j < numFontFields; j++)
{
free(fontNameFields[j]);
@@ -922,6 +917,11 @@ static void nxagentCollectFailedFont(FontPtr fpt, XID id)
if (nxagentFailedToReconnectFonts.font == NULL || nxagentFailedToReconnectFonts.id == NULL)
{
+ free(nxagentFailedToReconnectFonts.font);
+ nxagentFailedToReconnectFonts.font = NULL;
+ free(nxagentFailedToReconnectFonts.id);
+ nxagentFailedToReconnectFonts.id = NULL;
+
FatalError("Font: font not reconnected memory allocation failed!.\n");
}
@@ -1283,7 +1283,7 @@ Bool nxagentReconnectFailedFonts(void *p0)
fprintf(stderr, "nxagentReconnectFailedFonts: \n");
#endif
- if (nxagentGetFontServerPath(fontServerPath) == False)
+ if (nxagentGetFontServerPath(fontServerPath, sizeof(fontServerPath)) == False)
{
#ifdef WARNING
fprintf(stderr, "nxagentReconnectFailedFonts: WARNING! "
@@ -1404,17 +1404,18 @@ Bool nxagentDisconnectAllFonts()
return True;
}
-static Bool nxagentGetFontServerPath(char * fontServerPath)
+static Bool nxagentGetFontServerPath(char * fontServerPath, int size)
{
- char path[256];
+ char path[256] = {0};
- if (NXGetFontParameters(nxagentDisplay, 256, path) == True)
+ if (NXGetFontParameters(nxagentDisplay, sizeof(path), path) == True)
{
- if (*path != '\0')
- {
- strncpy(fontServerPath, path + 1, *path);
+ /* the length is stored in the first byte and is therefore limited to 255 */
+ unsigned int len = *path;
- *(fontServerPath + *path) = '\0';
+ if (len)
+ {
+ snprintf(fontServerPath, MIN(size, len + 1), "%s", path + 1);
#ifdef TEST
fprintf(stderr, "nxagentGetFontServerPath: Got path [%s].\n",
@@ -1451,9 +1452,11 @@ void nxagentVerifyDefaultFontPath(void)
fprintf(stderr, "nxagentVerifyDefaultFontPath: Going to search for one or more valid font paths.\n");
#endif
- fontPath = malloc(strlen(defaultFontPath) + 1);
+ /*
+ * Set the default font path as the first choice.
+ */
- if (fontPath == NULL)
+ if ((fontPath = strdup(defaultFontPath)) == NULL)
{
#ifdef WARNING
fprintf(stderr, "nxagentVerifyDefaultFontPath: WARNING! Unable to allocate memory for a new font path. "
@@ -1463,12 +1466,6 @@ void nxagentVerifyDefaultFontPath(void)
return;
}
- /*
- * Set the default font path as the first choice.
- */
-
- strcpy(fontPath, defaultFontPath);
-
if (stat(NXAGENT_DEFAULT_FONT_DIR, &dirStat) == 0 &&
S_ISDIR(dirStat.st_mode) != 0)
{
@@ -1740,9 +1737,7 @@ int nxagentSplitString(char *string, char *fields[], int nfields, char *sep)
if (i < nfields)
{
- fields[i] = (char *) malloc(fieldlen + 1);
- strncpy(fields[i], current, fieldlen);
- *(fields[i] + fieldlen) = 0;
+ fields[i] = strndup(current, fieldlen);
}
else
{
@@ -1766,14 +1761,9 @@ char *nxagentMakeScalableFontName(const char *fontName, int scalableResolution)
{
char *scalableFontName;
const char *s;
- int len;
int field;
- len = strlen(fontName) + 1;
-
- scalableFontName = malloc(len);
-
- if (scalableFontName == NULL)
+ if ((scalableFontName = malloc(strlen(fontName) + 1)) == NULL)
{
#ifdef PANIC
fprintf(stderr, "nxagentMakeScalableFontName: PANIC! malloc() failed.\n");
@@ -1782,7 +1772,7 @@ char *nxagentMakeScalableFontName(const char *fontName, int scalableResolution)
return NULL;
}
- scalableFontName[0] = 0;
+ scalableFontName[0] = '\0';
if (*fontName != '-')
{
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
index 8ae64ee00..3acf498ff 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
@@ -534,7 +534,6 @@ static void nxagentCheckXkbBaseDirectory(void)
static char *nxagentXkbGetRules()
{
int ret;
- int size, sizeDflt, sizeAlt;
char *path;
struct stat buf;
@@ -543,19 +542,11 @@ static char *nxagentXkbGetRules()
XkbBaseDirectory);
#endif
- sizeDflt = strlen(XKB_DFLT_RULES_FILE);
- sizeAlt = strlen(XKB_ALTS_RULES_FILE);
- size = strlen(XkbBaseDirectory) + strlen("/rules/");
- size += (sizeDflt > sizeAlt) ? sizeDflt : sizeAlt;
-
- if ((path = malloc((size + 1) * sizeof(char))) == NULL)
+ if (-1 == asprintf(&path, "%s/rules/%s", XkbBaseDirectory, XKB_DFLT_RULES_FILE))
{
FatalError("nxagentXkbGetRules: malloc failed.");
}
- strcpy(path, XkbBaseDirectory);
- strcat(path, "/rules/");
- strcat(path, XKB_DFLT_RULES_FILE);
#ifdef TEST
fprintf(stderr, "nxagentXkbGetRules: checking rules file [%s]\n", path);
#endif
@@ -572,11 +563,16 @@ static char *nxagentXkbGetRules()
#ifdef TEST
fprintf(stderr, "nxagentXkbGetRules: WARNING! Failed to stat file [%s]: %s.\n", path, strerror(ret));
- #endif
+ #endif
+
+ free(path);
+ path = NULL;
+
+ if (-1 == asprintf(&path, "%s/rules/%s", XkbBaseDirectory, XKB_ALTS_RULES_FILE))
+ {
+ FatalError("nxagentXkbGetRules: malloc failed.");
+ }
- strcpy(path, XkbBaseDirectory);
- strcat(path, "/rules/");
- strcat(path, XKB_ALTS_RULES_FILE);
#ifdef TEST
fprintf(stderr, "nxagentXkbGetRules: checking rules file [%s]\n", path);
#endif
@@ -1899,16 +1895,16 @@ void nxagentKeycodeConversionSetup(void)
char *sessionpath = nxagentGetSessionPath();
if (sessionpath)
{
- int keyboard_file_path_size = strlen(sessionpath) + strlen("/keyboard");
- char *keyboard_file_path = malloc((keyboard_file_path_size + 1) * sizeof(char));
+ char *keyboard_file_path = NULL;
FILE *keyboard_file;
- if (!keyboard_file_path)
+ if ((asprintf(&keyboard_file_path, "%s/keyboard", sessionpath) == -1))
{
- FatalError("nxagentKeycodeConversionSetup: malloc failed.");
+ free(sessionpath);
+ FatalError("malloc for keyboard file path failed.");
}
- strcpy(keyboard_file_path, sessionpath);
- strcat(keyboard_file_path, "/keyboard");
- if ((keyboard_file = fopen(keyboard_file_path, "w"))) {
+ free(sessionpath);
+ if ((keyboard_file = fopen(keyboard_file_path, "w")))
+ {
if (drules)
fprintf(keyboard_file, "rules=\"%s\"\n", drules[0] == '\0' ? "," : drules);
if (dmodel)
@@ -1920,7 +1916,7 @@ void nxagentKeycodeConversionSetup(void)
if (doptions)
fprintf(keyboard_file, "options=\"%s\"\n", doptions[0] == '\0' ? "," : doptions);
fclose(keyboard_file);
- fprintf(stderr, "Info: keyboard file created\n");
+ fprintf(stderr, "Info: keyboard file created: '%s'\n", keyboard_file_path);
}
else
{
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c b/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c
index f790090bf..61b4512fb 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Keystroke.c
@@ -324,13 +324,11 @@ void nxagentInitKeystrokes(Bool force)
char *homedir = getenv("HOME");
if (homedir)
{
- if (!(homepath = calloc(1, strlen(homedir) + strlen(homefile) + 1)))
+ if (-1 == asprintf(&homepath, "%s%s", homedir, homefile))
{
fprintf(stderr, "malloc failed");
exit(EXIT_FAILURE);
}
- strcpy(homepath, homedir);
- strcpy(homepath + strlen(homedir), homefile);
}
/* if any of the files can be read we have our candidate */
diff --git a/nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c b/nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c
index 49d864887..e59144f94 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/NXdixfonts.c
@@ -96,7 +96,8 @@ static Bool doListFontsAndAliases(ClientPtr client, LFclosurePtr c);
#ifdef NX_TRANS_SOCKET
-char _NXFontPath[1024];
+#define NXFONTPATHLENGTH 1024
+char _NXFontPath[NXFONTPATHLENGTH];
/*
* Override the default font path and make
@@ -112,7 +113,7 @@ static const char *_NXGetFontPath(const char *path)
* Check the environment only once.
*/
- if (*_NXFontPath != '\0')
+ if (_NXFontPath[0] != '\0')
{
return _NXFontPath;
}
@@ -121,7 +122,7 @@ static const char *_NXGetFontPath(const char *path)
if (fontEnv != NULL && *fontEnv != '\0')
{
- if (strlen(fontEnv) + 1 > 1024)
+ if (strlen(fontEnv) + 1 > NXFONTPATHLENGTH)
{
#ifdef NX_TRANS_TEST
fprintf(stderr, "_NXGetFontPath: WARNING! Maximum length of font path exceeded.\n");
@@ -129,7 +130,7 @@ static const char *_NXGetFontPath(const char *path)
goto _NXGetFontPathError;
}
- strcpy(_NXFontPath, fontEnv);
+ snprintf(_NXFontPath, NXFONTPATHLENGTH, "%s", fontEnv);
#ifdef NX_TRANS_TEST
fprintf(stderr, "_NXGetFontPath: Using NX font path [%s].\n", _NXFontPath);
@@ -140,8 +141,7 @@ static const char *_NXGetFontPath(const char *path)
_NXGetFontPathError:
- strncpy(_NXFontPath, path, 1023);
- _NXFontPath[1023] = '\0';
+ snprintf(_NXFontPath, NXFONTPATHLENGTH, "%s", path);
#ifdef NX_TRANS_TEST
fprintf(stderr, "_NXGetFontPath: Using default font path [%s].\n", _NXFontPath);
@@ -199,7 +199,7 @@ doOpenFont(ClientPtr client, OFclosurePtr c)
BitmapFormatScanlineUnit8;
- nxagentOrigFontNameLen = (c -> origFontNameLen < 256) ? c -> origFontNameLen : 255;
+ nxagentOrigFontNameLen = (c -> origFontNameLen < sizeof(nxagentOrigFontName) ? c -> origFontNameLen : sizeof(nxagentOrigFontName) - 1);
memcpy(nxagentOrigFontName, c -> origFontName, nxagentOrigFontNameLen);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
index cafa219ec..4774579aa 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
@@ -139,7 +139,7 @@ char stateFile[PATH_MAX];
void setStatePath(char* path)
{
- strncpy(stateFile, path, PATH_MAX-1);
+ snprintf(stateFile, PATH_MAX, "%s", path);
}
void saveAgentState(char* state)
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
index dd0fa301d..69c50cdf3 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
@@ -1783,36 +1783,31 @@ N/A
if(nxagentX2go)
{
#ifdef TEST
- fprintf(stderr, "nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window withid [%ld].\n",
+ fprintf(stderr, "nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window with id [%ld].\n",
(long int)nxagentDefaultWindows[pScreen->myNum]);
#endif
XClassHint hint;
- hint.res_name=malloc(strlen("X2GoAgent")+1);
- hint.res_class=malloc(strlen("X2GoAgent")+1);
- strcpy(hint.res_name,"X2GoAgent");
- strcpy(hint.res_class,"X2GoAgent");
- XSetClassHint(nxagentDisplay,nxagentDefaultWindows[pScreen->myNum],&hint);
+ hint.res_name = strdup("X2GoAgent");
+ hint.res_class = strdup("X2GoAgent");
+ XSetClassHint(nxagentDisplay, nxagentDefaultWindows[pScreen->myNum], &hint);
free(hint.res_name);
free(hint.res_class);
}
else
{
#ifdef TEST
- fprintf(stderr, "nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window withid [%ld].\n",
+ fprintf(stderr, "nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window with id [%ld].\n",
(long int)nxagentDefaultWindows[pScreen->myNum]);
#endif
XClassHint hint;
- hint.res_name=malloc(strlen("NXAgent")+1);
- hint.res_class=malloc(strlen("NXAgent")+1);
- strcpy(hint.res_name,"NXAgent");
- strcpy(hint.res_class,"NXAgent");
- XSetClassHint(nxagentDisplay,nxagentDefaultWindows[pScreen->myNum],&hint);
+ hint.res_name = strdup("NXAgent");
+ hint.res_class = strdup("NXAgent");
+ XSetClassHint(nxagentDisplay, nxagentDefaultWindows[pScreen->myNum], &hint);
free(hint.res_name);
free(hint.res_class);
}
-
if (nxagentOption(Fullscreen))
{
nxagentFullscreenWindow = nxagentDefaultWindows[pScreen->myNum];
@@ -2549,9 +2544,7 @@ int nxagentShadowInit(ScreenPtr pScreen, WindowPtr pWin)
}
else
{
- layout = malloc(strlen(&nxagentKeyboard[i + 1]) + 1);
-
- strcpy(layout, &nxagentKeyboard[i + 1]);
+ layout = strdup(&nxagentKeyboard[i + 1]);
}
}
@@ -3480,6 +3473,7 @@ FIXME: The port information is not used at the moment and produces a
in++;
local_buf[in]=pszReturnData[i-1];
+ /* "localhost:" */
strcat(local_buf,"6c6f63616c686f73743a");
in+=20;