From 8a91c64edf551c3c05483ec3f5c87e8dc27a3cc5 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 31 Jul 2020 23:51:23 -0400 Subject: Use snprintf instead of strlcpy --- bounce.c | 6 +++--- client.c | 2 +- compat.h | 3 +-- local.c | 6 ++++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/bounce.c b/bounce.c index c9b27b0..bee8aca 100644 --- a/bounce.c +++ b/bounce.c @@ -352,16 +352,16 @@ int main(int argc, char *argv[]) { switch (opt) { break; case '!': insecure = true; break; case 'A': clientCA = true; caPath = optarg; - break; case 'C': strlcpy(certPath, optarg, sizeof(certPath)); + break; case 'C': snprintf(certPath, sizeof(certPath), "%s", optarg); break; case 'H': bindHost = optarg; - break; case 'K': strlcpy(privPath, optarg, sizeof(privPath)); + break; case 'K': snprintf(privPath, sizeof(privPath), "%s", optarg); break; case 'N': stateNoNames = true; break; case 'P': bindPort = optarg; break; case 'Q': serverQueueInterval = parseInterval(optarg); break; case 'R': blindReq |= capParse(optarg, NULL); break; case 'S': serverBindHost = optarg; break; case 'T': clientSTS = false; - break; case 'U': strlcpy(bindPath, optarg, sizeof(bindPath)); + break; case 'U': snprintf(bindPath, sizeof(bindPath), "%s", optarg); break; case 'W': clientPass = optarg; break; case 'a': blindReq |= CapSASL; plain = optarg; break; case 'c': clientCert = optarg; diff --git a/client.c b/client.c index 7f9a06a..4f315c8 100644 --- a/client.c +++ b/client.c @@ -428,7 +428,7 @@ static char *snip(char *dst, size_t cap, const char *src, const regex_t *regex) ); if (len >= cap) return NULL; } - len += strlcpy(&dst[len], src, cap - len); + len += snprintf(&dst[len], cap - len, "%s", src); return (len < cap ? dst : NULL); } diff --git a/compat.h b/compat.h index 63109a0..4559434 100644 --- a/compat.h +++ b/compat.h @@ -30,8 +30,7 @@ // libcrypto defines these functions if libc doesn't. void explicit_bzero(void *b, size_t len); -#ifndef strlcpy -size_t strlcpy(char *restrict dst, const char *restrict src, size_t dstsize); +#ifndef strlcat size_t strlcat(char *restrict dst, const char *restrict src, size_t dstsize); #endif diff --git a/local.c b/local.c index 1e19ae5..b3670ee 100644 --- a/local.c +++ b/local.c @@ -161,8 +161,10 @@ size_t localUnix(int fds[], size_t cap, const char *path) { if (sock < 0) err(EX_OSERR, "socket"); struct sockaddr_un addr = { .sun_family = AF_UNIX }; - size_t len = strlcpy(addr.sun_path, path, sizeof(addr.sun_path)); - if (len >= sizeof(addr.sun_path)) { + int len = snprintf( + addr.sun_path, sizeof(addr.sun_path), "%s", path + ); + if ((size_t)len >= sizeof(addr.sun_path)) { errx(EX_CONFIG, "path too long: %s", path); } -- cgit 1.4.1