http://code.google.com/p/mcedaemon/source/detail?r=84
Modified:
/trunk/ud_socket.c
=======================================
--- /trunk/ud_socket.c Mon Oct 17 20:07:28 2011
+++ /trunk/ud_socket.c Mon Oct 17 20:17:05 2011
@@ -22,6 +22,12 @@
int fd;
int r;
struct sockaddr_un uds_addr;
+
+ /* sanity check */
+ if (strlen(name) >= sizeof(uds_addr.sun_path)) {
+ errno = ENAMETOOLONG;
+ return -1;
+ }
/* JIC */
unlink(name);
@@ -35,8 +41,7 @@
memset(&uds_addr, 0, sizeof(uds_addr));
uds_addr.sun_family = AF_UNIX;
strncpy(uds_addr.sun_path, name, sizeof(uds_addr.sun_path)-1);
- uds_addr.sun_path[sizeof(uds_addr.sun_path)-1] = '\0';
-
+
/* bind it to the socket */
r = bind(fd, (struct sockaddr *)&uds_addr, sizeof(uds_addr));
if (r < 0) {