Fix PR 19089: Environment variable TMP may yield gcc: abort
Even though I cannot reproduce the ICE any more, this is still a bug. We check already to see if we can access the directory but never check to see if the path is actually a directory. This adds the check and now we reject the file as not usable as a tmp directory. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. libiberty/ChangeLog: * make-temp-file.c (try_dir): Check to see if the dir is actually a directory.
This commit is contained in:
parent
2f0dd172bc
commit
68332ab7ec
@ -39,6 +39,10 @@ Boston, MA 02110-1301, USA. */
|
|||||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
#if HAVE_SYS_STAT_H
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef R_OK
|
#ifndef R_OK
|
||||||
#define R_OK 4
|
#define R_OK 4
|
||||||
@ -76,7 +80,17 @@ try_dir (const char *dir, const char *base)
|
|||||||
return base;
|
return base;
|
||||||
if (dir != 0
|
if (dir != 0
|
||||||
&& access (dir, R_OK | W_OK | X_OK) == 0)
|
&& access (dir, R_OK | W_OK | X_OK) == 0)
|
||||||
return dir;
|
{
|
||||||
|
/* Check to make sure dir is actually a directory. */
|
||||||
|
#ifdef S_ISDIR
|
||||||
|
struct stat s;
|
||||||
|
if (stat (dir, &s))
|
||||||
|
return NULL;
|
||||||
|
if (!S_ISDIR (s.st_mode))
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user