diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/private/helpers.c | 2 | ||||
-rw-r--r-- | src/nvim/api/private/helpers.h | 3 | ||||
-rw-r--r-- | src/nvim/os/server.c | 12 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index c4340ddd89..a43e7a8d2a 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -67,7 +67,7 @@ bool try_end(Error *err) ET_ERROR, NULL, &should_free); - strncpy(err->msg, msg, sizeof(err->msg)); + xstrlcpy(err->msg, msg, sizeof(err->msg)); err->set = true; free_global_msglist(); diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h index da7e357d04..2d917c2b5e 100644 --- a/src/nvim/api/private/helpers.h +++ b/src/nvim/api/private/helpers.h @@ -5,10 +5,11 @@ #include "nvim/api/private/defs.h" #include "nvim/vim.h" +#include "nvim/memory.h" #define set_api_error(message, err) \ do { \ - strncpy(err->msg, message, sizeof(err->msg)); \ + xstrlcpy(err->msg, message, sizeof(err->msg)); \ err->set = true; \ } while (0) diff --git a/src/nvim/os/server.c b/src/nvim/os/server.c index 9b5410c323..b2faa49a86 100644 --- a/src/nvim/os/server.c +++ b/src/nvim/os/server.c @@ -85,7 +85,11 @@ void server_start(char *endpoint, ChannelProtocol prot) char addr[ADDRESS_MAX_SIZE]; // Trim to `ADDRESS_MAX_SIZE` - strncpy(addr, endpoint, sizeof(addr)); + if (xstrlcpy(addr, endpoint, sizeof(addr)) >= sizeof(addr)) { + // TODO(aktau): since this is not what the user wanted, perhaps we + // should return an error here + EMSG2("Address was too long, truncated to %s", addr); + } // Check if the server already exists if (map_has(cstr_t)(servers, addr)) { @@ -111,7 +115,7 @@ void server_start(char *endpoint, ChannelProtocol prot) } // Extract the address part - strncpy(ip, addr, addr_len); + xstrlcpy(ip, addr, addr_len); int port = NEOVIM_DEFAULT_TCP_PORT; @@ -119,7 +123,7 @@ void server_start(char *endpoint, ChannelProtocol prot) char *port_end; // Extract the port port = strtol(ip_end + 1, &port_end, 10); - + errno = 0; if (errno != 0 || port == 0 || port > 0xffff) { // Invalid port, treat as named pipe or unix socket @@ -183,7 +187,7 @@ void server_stop(char *endpoint) char addr[ADDRESS_MAX_SIZE]; // Trim to `ADDRESS_MAX_SIZE` - strncpy(addr, endpoint, sizeof(addr)); + xstrlcpy(addr, endpoint, sizeof(addr)); if ((server = map_get(cstr_t)(servers, addr)) == NULL) { EMSG2("Not listening on %s", addr); |