aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/ipc/ipc.c20
-rw-r--r--src/transport/tcp/tcp.c9
2 files changed, 21 insertions, 8 deletions
diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c
index e5e19f36..b2c382fb 100644
--- a/src/transport/ipc/ipc.c
+++ b/src/transport/ipc/ipc.c
@@ -486,20 +486,29 @@ nni_ipc_ep_init(void **epp, const char *url, nni_sock *sock, int mode)
nni_ipc_ep * ep;
int rv;
nni_sockaddr sa;
+ size_t sz;
- if ((strlen(url) > NNG_MAXADDRLEN - 1) ||
- (strncmp(url, "ipc://", strlen("ipc://")) != 0)) {
+ if (strncmp(url, "ipc://", strlen("ipc://")) != 0) {
return (NNG_EADDRINVAL);
}
+ url += strlen("ipc://");
+ sz = sizeof(sa.s_un.s_path.sa_path);
sa.s_un.s_path.sa_family = NNG_AF_IPC;
- (void) snprintf(sa.s_un.s_path.sa_path, sizeof(sa.s_un.s_path.sa_path),
- "%s", url + strlen("ipc://"));
+
+ if (nni_strlcpy(sa.s_un.s_path.sa_path, url, sz) >= sz) {
+ return (NNG_EADDRINVAL);
+ }
if ((ep = NNI_ALLOC_STRUCT(ep)) == NULL) {
return (NNG_ENOMEM);
}
- url += strlen("ipc://");
+
+ if (nni_strlcpy(ep->addr, url, sizeof(ep->addr)) >= sizeof(ep->addr)) {
+ NNI_FREE_STRUCT(ep);
+ return (NNG_EADDRINVAL);
+ }
+
if ((rv = nni_plat_ipc_ep_init(&ep->iep, &sa, mode)) != 0) {
NNI_FREE_STRUCT(ep);
return (rv);
@@ -509,7 +518,6 @@ nni_ipc_ep_init(void **epp, const char *url, nni_sock *sock, int mode)
nni_aio_init(&ep->aio, nni_ipc_ep_cb, ep);
ep->proto = nni_sock_proto(sock);
- (void) snprintf(ep->addr, sizeof(ep->addr), "%s", url);
*epp = ep;
return (0);
diff --git a/src/transport/tcp/tcp.c b/src/transport/tcp/tcp.c
index de1bfa66..f0f07592 100644
--- a/src/transport/tcp/tcp.c
+++ b/src/transport/tcp/tcp.c
@@ -579,7 +579,9 @@ nni_tcp_ep_init(void **epp, const char *url, nni_sock *sock, int mode)
int passive;
// Make a copy of the url (to allow for destructive operations)
- snprintf(buf, sizeof(buf), "%s", url);
+ if (nni_strlcpy(buf, url, sizeof(buf)) >= sizeof(buf)) {
+ return (NNG_EADDRINVAL);
+ }
// Parse the URLs first.
rv = nni_tcp_parse_url(buf, &lhost, &lserv, &rhost, &rserv, mode);
@@ -620,6 +622,10 @@ nni_tcp_ep_init(void **epp, const char *url, nni_sock *sock, int mode)
if ((ep = NNI_ALLOC_STRUCT(ep)) == NULL) {
return (NNG_ENOMEM);
}
+ if (nni_strlcpy(ep->addr, url, sizeof(ep->addr)) >= sizeof(ep->addr)) {
+ NNI_FREE_STRUCT(ep);
+ return (NNG_EADDRINVAL);
+ }
if ((rv = nni_plat_tcp_ep_init(&ep->tep, &lsa, &rsa, mode)) != 0) {
NNI_FREE_STRUCT(ep);
@@ -630,7 +636,6 @@ nni_tcp_ep_init(void **epp, const char *url, nni_sock *sock, int mode)
nni_aio_init(&ep->aio, nni_tcp_ep_cb, ep);
ep->proto = nni_sock_proto(sock);
- (void) snprintf(ep->addr, sizeof(ep->addr), "%s", url);
*epp = ep;
return (0);