[GHC] #13676: Command line written to stats file by the rts is not executable

GHC ghc-devs at haskell.org
Tue May 9 21:34:41 UTC 2017


#13676: Command line written to stats file by the rts is not executable
-------------------------------------+-------------------------------------
           Reporter:  duog           |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Runtime        |           Version:  8.0.1
  System                             |
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Debugging
  Unknown/Multiple                   |  information is incorrect
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 The first line of the stats file output by the rts is the invocation of
 the program. However the "s around arguments are not present in that line.

 For example:
 {{{
 $ ghc +RTS -trts-test -RTS -e "do {putStrLn\$ show [1,2] ++
 (\"(\\\\haskell)\")}" &>/dev/null && cat rts-test | head -n 1
 /opt/ghc/8.0.2/lib/ghc-8.0.2/bin/ghc -B/opt/ghc/8.0.2/lib/ghc-8.0.2 -e do
 {putStrLn$ show [1,2] ++ ("(\\haskell)")} +RTS -trts-test
 }}}

 I would expect that this line could be pasted into a shell to invoke the
 command, however this is not the case as evidenced above. There are
 several issues evidenced by the above example:
 * the quoted argument "do {...}" does not have quotes in the output. I
 believe this is a true bug.
 * the $,"s and \s inside the quoted argument are not escaped. I'm fairly
 sure that at least the "s and \s should be escaped. Not so sure that $
 should be, since a shell isn't the only way to run a program.
 * The +RTS options are moved to the end. This is seems intentional and
 doesn't change semantics, but it seems better to be exactly the same.

 The relevant code is in initStatsFile in RtsFlags.c

 I'd suggest quoting each argument, escaping at least "s and \s inside
 arguments and thinking about whether escaping other shell characters like
 $ is a good idea.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13676>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list