diff options
author | tjr <tjr@FreeBSD.org> | 2002-06-29 04:52:33 +0000 |
---|---|---|
committer | tjr <tjr@FreeBSD.org> | 2002-06-29 04:52:33 +0000 |
commit | 2ca2fb4fa35657690af2afea3e3584496ee23ea8 (patch) | |
tree | 9acc7ef1f3f385e7bc99f09a1da028f2bb2a9126 | |
parent | 4db8ac83cb8d19620d8dc0773dc0592713a2a5ac (diff) | |
download | FreeBSD-src-2ca2fb4fa35657690af2afea3e3584496ee23ea8.zip FreeBSD-src-2ca2fb4fa35657690af2afea3e3584496ee23ea8.tar.gz |
Avoid truncating the pathname to UNIX Domain Sockets with snprintf(),
giving a more sensible warning when the (relatively meagre) sun_path
limit is exceeded.
-rw-r--r-- | bin/cat/cat.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/bin/cat/cat.c b/bin/cat/cat.c index 3ea05de..3d626f6 100644 --- a/bin/cat/cat.c +++ b/bin/cat/cat.c @@ -278,8 +278,11 @@ udom_open(const char *path, int flags) fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd >= 0) { sou.sun_family = AF_UNIX; - snprintf(sou.sun_path, sizeof(sou.sun_path), "%s", path); - len = strlen(sou.sun_path); + if ((len = strlcpy(sou.sun_path, path, + sizeof(sou.sun_path))) >= sizeof(sou.sun_path)) { + errno = ENAMETOOLONG; + return (-1); + } len = offsetof(struct sockaddr_un, sun_path[len+1]); if (connect(fd, (void *)&sou, len) < 0) { |