31 lines
1.2 KiB
Diff
31 lines
1.2 KiB
Diff
|
diff --git a/lib/findprog-in.c b/lib/findprog-in.c
|
||
|
index c254f2f..d89ec00 100644
|
||
|
--- a/lib/findprog-in.c
|
||
|
+++ b/lib/findprog-in.c
|
||
|
@@ -26,6 +26,7 @@
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <unistd.h>
|
||
|
+#include <sys/stat.h>
|
||
|
|
||
|
#include "filename.h"
|
||
|
#include "concat-filename.h"
|
||
|
@@ -190,6 +191,7 @@ find_in_given_path (const char *progname, const char *path,
|
||
|
dir = ".";
|
||
|
|
||
|
/* Try all platform-dependent suffixes. */
|
||
|
+ struct stat st;
|
||
|
for (i = 0; i < sizeof (suffixes) / sizeof (suffixes[0]); i++)
|
||
|
{
|
||
|
const char *suffix = suffixes[i];
|
||
|
@@ -208,7 +210,8 @@ find_in_given_path (const char *progname, const char *path,
|
||
|
use it. On other systems, let's hope that this program
|
||
|
is not installed setuid or setgid, so that it is ok to
|
||
|
call access() despite its design flaw. */
|
||
|
- if (eaccess (progpathname, X_OK) == 0)
|
||
|
+ if (eaccess (progpathname, X_OK) == 0 &&
|
||
|
+ stat(progpathname, &st) == 0 && S_ISREG(st.st_mode))
|
||
|
{
|
||
|
/* Found! */
|
||
|
if (strcmp (progpathname, progname) == 0)
|