summaryrefslogtreecommitdiff
path: root/src/terminal.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-01-30 16:27:20 +0100
committerBram Moolenaar <Bram@vim.org>2020-01-30 16:27:20 +0100
commit21109272f5b0d32c408dc292561c0b1f2f8ebc53 (patch)
tree40959604cbf5e45989ba592ceb28c1fc11a9784c /src/terminal.c
parent0c3064b39b4cd4f22fe1eab5438fe691d7cc80d1 (diff)
downloadvim-git-21109272f5b0d32c408dc292561c0b1f2f8ebc53.tar.gz
patch 8.2.0181: problems parsing :term argumentsv8.2.0181
Problem: Problems parsing :term arguments. Solution: Improve parsing, fix memory leak, add tests. (Ozaki Kiichi, closes #5536)
Diffstat (limited to 'src/terminal.c')
-rw-r--r--src/terminal.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/terminal.c b/src/terminal.c
index 3bf914ae9..d789ab056 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -595,9 +595,7 @@ term_start(
#if defined(FEAT_SESSION)
// Remember the command for the session file.
if (opt->jo_term_norestore || argv != NULL)
- {
term->tl_command = vim_strsave((char_u *)"NONE");
- }
else if (argvar->v_type == VAR_STRING)
{
char_u *cmd = argvar->vval.v_string;
@@ -646,7 +644,11 @@ term_start(
}
if (opt->jo_term_api != NULL)
- term->tl_api = vim_strsave(opt->jo_term_api);
+ {
+ char_u *p = skiptowhite(opt->jo_term_api);
+
+ term->tl_api = vim_strnsave(opt->jo_term_api, p - opt->jo_term_api);
+ }
else
term->tl_api = vim_strsave((char_u *)"Tapi_");
@@ -778,6 +780,7 @@ ex_terminal(exarg_T *eap)
char_u *buf = NULL;
char_u *keys;
+ vim_free(opt.jo_eof_chars);
p = skiptowhite(cmd);
*p = NUL;
keys = replace_termcodes(ep + 1, &buf,
@@ -6697,7 +6700,7 @@ term_and_job_init(
#endif
// This may change a string in "argvar".
- term->tl_job = job_start(argvar, argv, opt, TRUE);
+ term->tl_job = job_start(argvar, argv, opt, &term->tl_job);
if (term->tl_job != NULL)
++term->tl_job->jv_refcount;