diff options
author | Duncan Coutts <duncan@well-typed.com> | 2011-10-27 17:35:44 +0100 |
---|---|---|
committer | Duncan Coutts <duncan@well-typed.com> | 2011-10-27 17:35:44 +0100 |
commit | 6dfd9016c38aa1877e2ad2f926750162c6aa10e6 (patch) | |
tree | 2bbc2b721f670ac941fc3e24b3aa76c6a888a8d2 /rts | |
parent | 8c7ad0bd5bf1e7f62f44784cc889e8ee585b8d08 (diff) | |
download | haskell-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')
-rw-r--r-- | rts/RtsFlags.c | 14 |
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); |