diff -rup run-1.1.12/src/run.c /tmp/run-1.1.12/src/run.c --- old/run-1.1.12/src/run.c 2010-12-31 13:43:05.770732300 -0500 +++ run-1.1.12/src/run.c 2010-12-31 13:41:13.093732300 -0500 @@ -810,10 +810,16 @@ void process_execname(char *exec, const { if ((stbuf.st_mode & S_IFLNK) == S_IFLNK) { - if (readlink(sym_link_name, real_name, sizeof(real_name)) == -1) + ssize_t len; + + if ((len = readlink(sym_link_name, real_name, sizeof(real_name))) == -1) error("problem reading symbolic link for %s",exec_tmp); else { + if (len < sizeof(real_name)) + real_name[len] = '\0'; + else + error("symlink pointed to by %s is too long", sym_link_name); /* if realname starts with '/' it's a rootpath */ if (real_name[0] == '/') strcpy(exec_tmp2,real_name);