[GHC] #8802: createProcess implictlitly escapes and quotes command line parameters
GHC
ghc-devs at haskell.org
Thu Feb 20 12:36:55 UTC 2014
#8802: createProcess implictlitly escapes and quotes command line parameters
--------------------------------------+------------------------------------
Reporter: jstolarek | Owner:
Type: bug | Status: closed
Priority: high | Milestone: 7.8.1
Component: libraries/process | Version: 7.9
Resolution: invalid | Keywords:
Operating System: Linux | Architecture: Unknown/Multiple
Type of failure: Runtime crash | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
--------------------------------------+------------------------------------
Comment (by nomeata):
> > Well, if you check where translate is being used: It is only used on
Windows
>
> Hm... looks like you're right. In that case which part of the code
quotes parameters to proc? Because this clearly is performed at some
point.
No, they are not escaped and they need not to be; they are put in separate
strings and passed to `execve`. Escaping is only required if you use the
shell to execute the program – if you don’t use the shell, no escaping is
required.
> > With proc it is safe to call proc "echo" [possibly_malicous_string]
>
> I don't understand this. Could you give example of how
possibly_malicous_string could be dangerous (assuming characters are not
escaped)?
{{{
possibly_malicous_string = "$(rm -rf /)"
}}}
> > If you want shell features, use shell instead of proc
>
> Problem with shell is that it runs sh shell, not bash. Replacing proc
with shell in my example code gives:
>
> /bin/sh: -c: line 0: syntax error near unexpected token `('
> /bin/sh: -c: line 0: `diff <(echo $FOO) <(echo $BAR)'
Well, if you want a different shell than your system default, I guess you
need to invoke it explicitly:
{{{
proc "bash" ["-c", some_bash_script]
}}}
> I don't think this ticket should be closed - this is at least a
documentation bug.
I wouldn’t call it a bug; the semantics of `proc` vs. `shell` are quite
standard and expected, at least with some background in Unix systems
assumed.
But of course there is always room for improvement. Any suggestions? Maybe
“Because the command is executed directly, and not via a shell, the
arguments do not need to be escaped, but you cannot use shell features
like output redirection”?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8802#comment:8>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list