summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@oracle.com>2014-05-20 22:39:40 -0700
committerAlan Coopersmith <alan.coopersmith@oracle.com>2014-05-20 23:10:57 -0700
commit0c2c5520eef72b851aef245e4d5209087e824385 (patch)
tree966a7815440cee9e633dad1c6b87cba46ab5b549
parent51970b9a6f51fdb23ccdd566b48594aeb593eb11 (diff)
Convert remaining sprintf calls to snprintf
Removes a bonus unchecked strcat() call as well. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r--os/connection.c4
-rw-r--r--os/osglue.c34
2 files changed, 21 insertions, 17 deletions
diff --git a/os/connection.c b/os/connection.c
index 17c3384..caaa6c4 100644
--- a/os/connection.c
+++ b/os/connection.c
@@ -201,7 +201,7 @@ CreateSockets(int old_listen_count, OldListenRec *old_listen)
if (old_listen[i].portnum != ListenPort)
continue; /* this should never happen */
else
- sprintf (portnum, "%d", old_listen[i].portnum);
+ snprintf (portnum, sizeof(portnum), "%d", old_listen[i].portnum);
if ((ListenTransConns[ListenTransCount] =
_FontTransReopenCOTSServer (old_listen[i].trans_id,
@@ -220,7 +220,7 @@ CreateSockets(int old_listen_count, OldListenRec *old_listen)
char port[20];
int partial;
- sprintf (port, "%d", ListenPort);
+ snprintf (port, sizeof(port), "%d", ListenPort);
if ((_FontTransMakeAllCOTSServerListeners (port, &partial,
&ListenTransCount, &ListenTransConns) >= 0) &&
diff --git a/os/osglue.c b/os/osglue.c
index cd4c268..538ab10 100644
--- a/os/osglue.c
+++ b/os/osglue.c
@@ -274,20 +274,14 @@ int
CloneMyself(void)
{
int child;
- char old_listen_arg[256];
- char *arg_ptr = old_listen_arg;
int i, j;
int lastfdesc;
- char portnum[20];
assert(!drone_server); /* a drone shouldn't hit this */
if (!CloneSelf)
return -1;
-
- old_listen_arg[0] = '\0';
-
lastfdesc = sysconf(_SC_OPEN_MAX) - 1;
if ( (lastfdesc < 0) || (lastfdesc > MAXSOCKS)) {
lastfdesc = MAXSOCKS;
@@ -312,6 +306,9 @@ CloneMyself(void)
drone_server = TRUE;
return 1;
} else { /* parent */
+ char old_listen_arg[256];
+ char portnum[8];
+
NoticeF("clone: parent revitalizing as %s\n", progname);
CloseErrors();
/* XXX should we close stdio as well? */
@@ -325,27 +322,34 @@ CloneMyself(void)
(void) close(i);
}
+ old_listen_arg[0] = '\0';
+
for (i = 0; i < ListenTransCount; i++)
{
int trans_id, fd;
char *port;
+ size_t arg_len;
if (!_FontTransGetReopenInfo (ListenTransConns[i],
&trans_id, &fd, &port))
continue;
- sprintf (arg_ptr, "%d/%d/%s", trans_id, fd, port);
- arg_ptr += strlen (arg_ptr);
- free (port);
-
- if (i < ListenTransCount - 1)
- {
- strcat (arg_ptr, ",");
- arg_ptr++;
+ arg_len = strlen(old_listen_arg);
+ if (arg_len < sizeof(old_listen_arg)) {
+ char *arg_ptr = old_listen_arg + arg_len;
+ size_t actual_len;
+ actual_len = snprintf (arg_ptr, sizeof(old_listen_arg) - arg_len,
+ "%s%d/%d/%s", (arg_len > 0) ? "," : "",
+ trans_id, fd, port);
+ /* Ensure we don't leave a partial address if we ran out of
+ room in the buffer */
+ if (actual_len >= (sizeof(old_listen_arg) - arg_len))
+ *arg_ptr = '\0';
}
+ free (port);
}
- sprintf (portnum, "%d", ListenPort);
+ snprintf (portnum, sizeof(portnum), "%d", ListenPort);
if (*old_listen_arg != '\0')
execlp(progname, progname,
"-ls", old_listen_arg,