diff options
author | Magnus Ottenklinger <[email protected]> | 2015-10-02 11:29:05 +0200 |
---|---|---|
committer | Magnus Ottenklinger <[email protected]> | 2015-10-02 15:13:10 +0200 |
commit | 731890f3b4ac62eed1221aa7d9fd2bfa6bf51d8c (patch) | |
tree | 6517fcce3b266ea067645ac7a8e1b681b03ed7f0 /erts/etc/common/escript.c | |
parent | 46178552c4622b29d5a70ca23d945e9036caa437 (diff) | |
download | otp-731890f3b4ac62eed1221aa7d9fd2bfa6bf51d8c.tar.gz otp-731890f3b4ac62eed1221aa7d9fd2bfa6bf51d8c.tar.bz2 otp-731890f3b4ac62eed1221aa7d9fd2bfa6bf51d8c.zip |
Fix erroneous splitting of emulator path
`ct_run.c`, `erlc.c`, `escript.c` and `typer.c` do not preserve space characters in the emulator
path. Thus, if a path containing space is passed via environment variables, such as
`ESCRIPT_EMULATOR`, or if `get_default_emulator(progname)` returns a path with space, the execution
of the programs fail. This patch fixes all occurrences found with `grep push_words -R $ERL_TOP`.
Diffstat (limited to 'erts/etc/common/escript.c')
-rw-r--r-- | erts/etc/common/escript.c | 25 |
1 files changed, 2 insertions, 23 deletions
diff --git a/erts/etc/common/escript.c b/erts/etc/common/escript.c index 7fd02ed436..a5c6d0d40b 100644 --- a/erts/etc/common/escript.c +++ b/erts/etc/common/escript.c @@ -74,7 +74,6 @@ static void error(char* format, ...); static char* emalloc(size_t size); static void efree(void *p); static char* strsave(char* string); -static void push_words(char* src); static int run_erlang(char* name, char** argv); static char* get_default_emulator(char* progname); #ifdef __WIN32__ @@ -432,7 +431,7 @@ main(int argc, char** argv) emulator = get_default_emulator(argv[0]); } - if (strlen(emulator) >= PMAX) + if (strlen(emulator) >= MAXPATHLEN) error("Value of environment variable ESCRIPT_EMULATOR is too large"); /* @@ -445,7 +444,7 @@ main(int argc, char** argv) eargv_base = (char **) emalloc(eargv_size*sizeof(char*)); eargv = eargv_base; eargc = 0; - push_words(emulator); + PUSH(strsave(emulator)); eargc_base = eargc; eargv = eargv + eargv_size/2; eargc = 0; @@ -554,26 +553,6 @@ main(int argc, char** argv) return run_erlang(eargv[0], eargv); } -static void -push_words(char* src) -{ - char sbuf[PMAX]; - char* dst; - - dst = sbuf; - while ((*dst++ = *src++) != '\0') { - if (isspace((int)*src)) { - *dst = '\0'; - PUSH(strsave(sbuf)); - dst = sbuf; - do { - src++; - } while (isspace((int)*src)); - } - } - if (sbuf[0]) - PUSH(strsave(sbuf)); -} #ifdef __WIN32__ wchar_t *make_commandline(char **argv) { |