Browse Source

merge from gcc

cygwin-64bit-branch
DJ Delorie 15 years ago
parent
commit
dd28faae1a
  1. 11
      libiberty/ChangeLog
  2. 23
      libiberty/make-relative-prefix.c

11
libiberty/ChangeLog

@ -1,3 +1,14 @@
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.

23
libiberty/make-relative-prefix.c

@ -1,6 +1,6 @@
/* 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)

Loading…
Cancel
Save