--- xulrunner/stub/nsXULStub.cpp	2008-07-17 21:43:11.000000000 +0200
+++ 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;
       }