aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Brolley <brolley@cygnus.com>1999-04-13 09:43:28 +0000
committerDave Brolley <brolley@gcc.gnu.org>1999-04-13 05:43:28 -0400
commit9e934a98fa37516550d4642ea3cbc182031d4557 (patch)
treef4087acd43a3c4a6118901005fd181d1ca707299
parenta4e44caa6d2a951af67aefb76ee22f7735bf293b (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/Makefile.in2
-rw-r--r--gcc/cppinit.c15
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);