Don't silently ignore any suppression contexts beyond the 4th -- instead abort
with a warning. Addresses part of bug #77922.
MERGE TO STABLE
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2946 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vg_errcontext.c b/coregrind/vg_errcontext.c
index 5a2274e..f69cc4b 100644
--- a/coregrind/vg_errcontext.c
+++ b/coregrind/vg_errcontext.c
@@ -787,7 +787,7 @@
{
# define N_BUF 200
Int fd, i;
- Bool eof;
+ Bool eof, too_many_contexts = False;
Char buf[N_BUF+1];
Char* tool_names;
Char* supp_name;
@@ -883,9 +883,13 @@
/* make sure to grab the '}' if the num callers is >=
VG_N_SUPP_CALLERS */
if (!VG_STREQ(buf, "}")) {
- do {
- eof = VG_(get_line) ( fd, buf, N_BUF );
- } while (!eof && !VG_STREQ(buf, "}"));
+ // Don't just ignore extra lines -- abort. (Someone complained
+ // about silent ignoring of lines in bug #77922.)
+ //do {
+ // eof = VG_(get_line) ( fd, buf, N_BUF );
+ //} while (!eof && !VG_STREQ(buf, "}"));
+ too_many_contexts = True;
+ goto syntax_error;
}
supp->next = vg_suppressions;
@@ -899,6 +903,13 @@
VG_(message)(Vg_UserMsg,
"FATAL: in suppressions file `%s': unexpected EOF",
filename );
+ } else if (too_many_contexts) {
+ VG_(message)(Vg_UserMsg,
+ "FATAL: in suppressions file: `%s': at %s:",
+ filename, buf );
+ VG_(message)(Vg_UserMsg,
+ "too many lines (limit of %d contexts in suppressions)",
+ VG_N_SUPP_CALLERS);
} else {
VG_(message)(Vg_UserMsg,
"FATAL: in suppressions file: `%s': syntax error on: %s",
@@ -906,7 +917,7 @@
}
VG_(close)(fd);
VG_(message)(Vg_UserMsg, "exiting now.");
- VG_(exit)(1);
+ VG_(exit)(1);
# undef N_BUF
}