summaryrefslogtreecommitdiff
path: root/rts/RtsFlags.c
diff options
context:
space:
mode:
authorDuncan Coutts <duncan@well-typed.com>2011-10-27 17:35:44 +0100
committerDuncan Coutts <duncan@well-typed.com>2011-10-27 17:35:44 +0100
commit6dfd9016c38aa1877e2ad2f926750162c6aa10e6 (patch)
tree2bbc2b721f670ac941fc3e24b3aa76c6a888a8d2 /rts/RtsFlags.c
parent8c7ad0bd5bf1e7f62f44784cc889e8ee585b8d08 (diff)
downloadhaskell-6dfd9016c38aa1877e2ad2f926750162c6aa10e6.tar.gz
Allow the -t -T -s -S flags (without <file> arg!) in -rtsopts=some mode
Without any <file> arg, these flags just dump info to stderr so are at most a mild information disclosure danger. We disallow a <file> arg in the default -rtsopts=some mode since that will overwrite the given file.
Diffstat (limited to 'rts/RtsFlags.c')
-rw-r--r--rts/RtsFlags.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c
index f0eec89403..c3784ad2ee 100644
--- a/rts/RtsFlags.c
+++ b/rts/RtsFlags.c
@@ -893,28 +893,31 @@ error = rtsTrue;
break;
case 'T':
- OPTION_UNSAFE;
+ OPTION_SAFE;
RtsFlags.GcFlags.giveStats = COLLECT_GC_STATS;
break; /* Don't initialize statistics file. */
case 'S':
- OPTION_UNSAFE;
+ OPTION_SAFE; /* but see below */
RtsFlags.GcFlags.giveStats = VERBOSE_GC_STATS;
goto stats;
case 's':
- OPTION_UNSAFE;
+ OPTION_SAFE; /* but see below */
RtsFlags.GcFlags.giveStats = SUMMARY_GC_STATS;
goto stats;
case 't':
- OPTION_UNSAFE;
+ OPTION_SAFE; /* but see below */
RtsFlags.GcFlags.giveStats = ONELINE_GC_STATS;
goto stats;
stats:
{
int r;
+ if (rts_argv[arg][2] != '\0') {
+ OPTION_UNSAFE;
+ }
r = openStatsFile(rts_argv[arg]+2, NULL,
&RtsFlags.GcFlags.statsFile);
if (r == -1) { error = rtsTrue; }
@@ -1241,6 +1244,9 @@ error = rtsTrue;
{
int r;
+ if (rts_argv[arg][2] != '\0') {
+ OPTION_UNSAFE;
+ }
r = openStatsFile(rts_argv[arg]+2,
TICKY_FILENAME_FMT,
&RtsFlags.TickyFlags.tickyFile);