diff options
author | Dave Brolley <brolley@cygnus.com> | 1999-04-13 09:43:28 +0000 |
---|---|---|
committer | Dave Brolley <brolley@gcc.gnu.org> | 1999-04-13 05:43:28 -0400 |
commit | 9e934a98fa37516550d4642ea3cbc182031d4557 (patch) | |
tree | f4087acd43a3c4a6118901005fd181d1ca707299 | |
parent | a4e44caa6d2a951af67aefb76ee22f7735bf293b (diff) | |
download | gcc-9e934a98fa37516550d4642ea3cbc182031d4557.zip gcc-9e934a98fa37516550d4642ea3cbc182031d4557.tar.gz gcc-9e934a98fa37516550d4642ea3cbc182031d4557.tar.bz2 |
cppinit.c (cpp_start_read): Fix buffer overwrite.
Tue Apr 13 12:14:07 1999 Dave Brolley <brolley@cygnus.com>
* cppinit.c (cpp_start_read): Fix buffer overwrite.
* Makefile.in (cppinit.o): Typo in dependencies.
From-SVN: r26401
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/Makefile.in | 2 | ||||
-rw-r--r-- | gcc/cppinit.c | 15 |
3 files changed, 14 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ccf1d9f..0dd7650 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Tue Apr 13 12:14:07 1999 Dave Brolley <brolley@cygnus.com> + + * cppinit.c (cpp_start_read): Fix buffer overwrite. + * Makefile.in (cppinit.o): Typo in dependencies. + Tue Apr 13 05:04:59 1999 Richard Earnshaw (rearnsha@arm.com) * arm.h (function prototypes for arm.c): Ifdef these out if diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 80fc7b7..942280c 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1988,7 +1988,7 @@ cpperror.o: cpperror.c $(CONFIG_H) cpplib.h intl.h system.h cppexp.o: cppexp.c $(CONFIG_H) cpplib.h intl.h system.h cppfiles.o: cppfiles.c $(CONFIG_H) cpplib.h intl.h system.h -cppinit.o: cppalloc.c $(CONFIG_H) cpplib.h intl.h system.h \ +cppinit.o: cppinit.c $(CONFIG_H) cpplib.h intl.h system.h \ cpphash.h prefix.h output.h Makefile $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \ diff --git a/gcc/cppinit.c b/gcc/cppinit.c index 7300800..d02a1f9 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -881,22 +881,21 @@ cpp_start_read (pfile, fname) { struct default_include *p = include_defaults_array; char *specd_prefix = opts->include_prefix; - char *default_prefix = alloca (sizeof GCC_INCLUDE_DIR - 7); - int default_len; - int specd_len; /* Search "translated" versions of GNU directories. These have /usr/local/lib/gcc... replaced by specd_prefix. */ if (specd_prefix != 0) { + char *default_prefix = alloca (sizeof GCC_INCLUDE_DIR - 7); /* Remove the `include' from /usr/local/lib/gcc.../include. GCC_INCLUDE_DIR will always end in /include. */ + int default_len = sizeof GCC_INCLUDE_DIR - 8; + int specd_len = strlen (specd_prefix); + default_len = sizeof GCC_INCLUDE_DIR - 8; memcpy (default_prefix, GCC_INCLUDE_DIR, default_len); default_prefix[default_len] = '\0'; - - specd_len = strlen (specd_prefix); for (p = include_defaults_array; p->fname; p++) { /* Some standard dirs are only for C++. */ @@ -909,10 +908,12 @@ cpp_start_read (pfile, fname) { /* Yes; change prefix and add to search list. */ int flen = strlen (p->fname); - int this_len = specd_len - default_len + flen; + int this_len = specd_len + flen - default_len; char *str = (char *) xmalloc (this_len + 1); memcpy (str, specd_prefix, specd_len); - memcpy (str+specd_len, p->fname, flen + 1); + memcpy (str + specd_len, + p->fname + default_len, + flen - default_len + 1); append_include_chain (pfile, opts->pending, str, SYSTEM); |