diff -uprN bird-1.0.11-old/client/client.c bird-1.0.11/client/client.c
--- bird-1.0.11-old/client/client.c	2004-06-05 11:26:48.000000000 +0200
+++ bird-1.0.11/client/client.c	2008-08-27 15:25:32.000000000 +0200
@@ -252,6 +252,10 @@ server_connect(void)
   server_fd = socket(AF_UNIX, SOCK_STREAM, 0);
   if (server_fd < 0)
     die("Cannot create socket: %m");
+
+  if (strlen(server_path) >= sizeof(sa.sun_path))
+    die("server_connect: path too long");
+
   bzero(&sa, sizeof(sa));
   sa.sun_family = AF_UNIX;
   strcpy(sa.sun_path, server_path);
diff -uprN bird-1.0.11-old/sysdep/unix/io.c bird-1.0.11/sysdep/unix/io.c
--- bird-1.0.11-old/sysdep/unix/io.c	2008-08-27 15:02:33.000000000 +0200
+++ bird-1.0.11/sysdep/unix/io.c	2008-08-27 15:23:44.000000000 +0200
@@ -868,6 +868,10 @@ sk_open_unix(sock *s, char *name)
   if (err = sk_setup(s))
     goto bad;
   unlink(name);
+ 
+  if (strlen(name) >= sizeof(sa.sun_path))
+    die("sk_open_unix: path too long");
+
   sa.sun_family = AF_UNIX;
   strcpy(sa.sun_path, name);
   if (bind(fd, (struct sockaddr *) &sa, SUN_LEN(&sa)) < 0)
