--- old/sakura-2.4.2/src/sakura.c	2012-02-03 14:18:51.789612191 +0100
+++ sakura-2.4.2/src/sakura.c	2012-02-07 11:28:35.744325950 +0100
@@ -1378,17 +1378,27 @@
 
 	if (term->pid >= 0) {
 		char *file;
-		char buf[PATH_MAX+1];
+		char *buf = NULL;
+		struct stat sb;
 		int len;
 
+		if (lstat(file, &sb) == -1) {
+			return cwd;
+		}
+		buf = malloc(sb.st_size + 1);
 		file = g_strdup_printf ("/proc/%d/cwd", term->pid);
-		len = readlink (file, buf, sizeof (buf) - 1);
+		len = readlink (file, buf, sb.st_size + 1);
 
+		if (len < 0 || len > sb.st_size) {
+			g_free(buf);
+			return cwd;
+		}
 		if (len > 0 && buf[0] == '/') {
 			buf[len] = '\0';
 			cwd = g_strdup(buf);
 		}
 
+		g_free(buf);
 		g_free(file);
 	}
 
