aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTimo Kokkonen <tjko@iki.fi>2003-10-08 15:29:27 +0300
committerEric Botcazou <ebotcazou@gcc.gnu.org>2003-10-08 12:29:27 +0000
commit10dbf393161d85616f515ceb176e550c8686bf42 (patch)
tree3b7c3bc5223dc394703026186605b645907b3445 /gcc
parente6e2802fa761041287343a591e94f50d75f4af06 (diff)
downloadgcc-10dbf393161d85616f515ceb176e550c8686bf42.zip
gcc-10dbf393161d85616f515ceb176e550c8686bf42.tar.gz
gcc-10dbf393161d85616f515ceb176e550c8686bf42.tar.bz2
re PR bootstrap/12490 (buffer overflow in scan-decls.c)
PR bootstrap/12490 * scan-decls.c (MAX_EXTERN_C_BRACES): New preprocessor constant to define the size of the extern_C_braces array. Set it to 200. (scan_decls): Abort when extern_C_braces_length is out-of-bounds. Co-Authored-By: Eric Botcazou <ebotcazou@libertysurf.fr> From-SVN: r72224
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/scan-decls.c10
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5b2e01a..72fd7ae 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2003-10-08 Timo Kokkonen <tjko@iki.fi>
+ Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR bootstrap/12490
+ * scan-decls.c (MAX_EXTERN_C_BRACES): New preprocessor constant
+ to define the size of the extern_C_braces array. Set it to 200.
+ (scan_decls): Abort when extern_C_braces_length is out-of-bounds.
+
2003-10-08 Carlo Wood <carlo@alinoe.com>
* Makefile.in (gengtype-lex.c): flex 2.5.4[a] doesn't understand
diff --git a/gcc/scan-decls.c b/gcc/scan-decls.c
index 14f64e8..ebd69cb 100644
--- a/gcc/scan-decls.c
+++ b/gcc/scan-decls.c
@@ -34,7 +34,9 @@ int brace_nesting = 0;
indicate the (brace nesting levels of) left braces that were
prefixed by extern "C". */
int extern_C_braces_length = 0;
-char extern_C_braces[20];
+/* 20 is not enough anymore on Solaris 9. */
+#define MAX_EXTERN_C_BRACES 200
+char extern_C_braces[MAX_EXTERN_C_BRACES];
#define in_extern_C_brace (extern_C_braces_length>0)
/* True if the function declaration currently being scanned is
@@ -220,6 +222,12 @@ scan_decls (cpp_reader *pfile, int argc ATTRIBUTE_UNUSED,
brace_nesting++;
extern_C_braces[extern_C_braces_length++]
= brace_nesting;
+ if (extern_C_braces_length >= MAX_EXTERN_C_BRACES)
+ {
+ fprintf (stderr,
+ "Internal error: out-of-bounds index\n");
+ exit (FATAL_EXIT_CODE);
+ }
goto new_statement;
}
}