Skip to content
Snippets Groups Projects
Commit 341d3f6e authored by Jakub Jelinek's avatar Jakub Jelinek Committed by Jakub Jelinek
Browse files

re PR driver/48306 (presence of gcc subdir with . in PATH causes breakdown)

	* make-relative-prefix.c (make_relative_prefix_1): Avoid
	stack overflow if PATH contains just a single entry and
	HOST_EXECUTABLE_SUFFIX needs to be used.

	PR driver/48306
	* make-relative-prefix.c: Include sys/stat.h.
	(make_relative_prefix_1): If access succeeds, check also stat
	if nstore is a regular file.

From-SVN: r182820
parent a4f436ff
No related branches found
No related tags found
No related merge requests found
2012-01-02 Jakub Jelinek <jakub@redhat.com>
* make-relative-prefix.c (make_relative_prefix_1): Avoid
stack overflow if PATH contains just a single entry and
HOST_EXECUTABLE_SUFFIX needs to be used.
PR driver/48306
* make-relative-prefix.c: Include sys/stat.h.
(make_relative_prefix_1): If access succeeds, check also stat
if nstore is a regular file.
2011-12-20 Andreas Schwab <schwab@linux-m68k.org>
* configure: Regenerate.
......
/* Relative (relocatable) prefix support.
Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
1999, 2000, 2001, 2002, 2006, 2012 Free Software Foundation, Inc.
This file is part of libiberty.
......@@ -58,6 +58,9 @@ relative prefix can be found, return @code{NULL}.
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#include <string.h>
......@@ -248,7 +251,11 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
if (prefixlen < 2)
prefixlen = 2;
nstore = (char *) alloca (prefixlen + strlen (progname) + 1);
nstore = (char *) alloca (prefixlen + strlen (progname) + 1
#ifdef HAVE_HOST_EXECUTABLE_SUFFIX
+ strlen (HOST_EXECUTABLE_SUFFIX)
#endif
);
startp = endp = temp;
while (1)
......@@ -263,7 +270,7 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
}
else
{
strncpy (nstore, startp, endp - startp);
memcpy (nstore, startp, endp - startp);
if (! IS_DIR_SEPARATOR (endp[-1]))
{
nstore[endp - startp] = DIR_SEPARATOR;
......@@ -279,8 +286,14 @@ make_relative_prefix_1 (const char *progname, const char *bin_prefix,
#endif
)
{
progname = nstore;
break;
#if defined (HAVE_SYS_STAT_H) && defined (S_ISREG)
struct stat st;
if (stat (nstore, &st) >= 0 && S_ISREG (st.st_mode))
#endif
{
progname = nstore;
break;
}
}
if (*endp == 0)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment