--- a/xulrunner/stub/nsXULStub.cpp 2008-07-17 21:43:11.000000000 +0200 +++ b/xulrunner/stub/nsXULStub.cpp 2008-07-17 21:47:04.000000000 +0200 @@ -208,8 +208,10 @@ // 3) give up struct stat fileStat; + char *testp; - if (!realpath(argv[0], iniPath) || stat(iniPath, &fileStat)) { + testp = realpath(argv[0], iniPath); + if (!(testp != NULL && stat(iniPath, &fileStat) == 0 && S_ISREG(fileStat.st_mode) && fileStat.st_mode & S_IXUSR) || (testp != NULL && stat(iniPath, &fileStat))) { const char *path = getenv("PATH"); if (!path) return 1; @@ -222,7 +224,7 @@ char *token = strtok(pathdup, ":"); while (token) { sprintf(tmpPath, "%s/%s", token, argv[0]); - if (realpath(tmpPath, iniPath) && stat(iniPath, &fileStat) == 0) { + if (realpath(tmpPath, iniPath) && stat(iniPath, &fileStat) == 0 && S_ISREG(fileStat.st_mode) && fileStat.st_mode & S_IXUSR) { found = PR_TRUE; break; }