1
0
forked from aniani/vim

patch 8.0.1647: terminal API may call any user function

Problem:    Terminal API may call a function not meant to be called by this
            API.
Solution:   Require the function to start with Tapi_.
This commit is contained in:
Bram Moolenaar
2018-03-26 21:38:52 +02:00
parent 4368d5ce8a
commit 2a77d21f78
4 changed files with 47 additions and 19 deletions

View File

@@ -1072,24 +1072,28 @@ func Test_terminal_api_drop_oldwin()
bwipe Xtextfile
endfunc
func TryThis(bufnum, arg)
func Tapi_TryThis(bufnum, arg)
let g:called_bufnum = a:bufnum
let g:called_arg = a:arg
endfunc
func WriteApiCall(funcname)
" Use the title termcap entries to output the escape sequence.
call writefile([
\ 'set title',
\ 'exe "set t_ts=\<Esc>]51; t_fs=\x07"',
\ 'let &titlestring = ''["call","' . a:funcname . '",["hello",123]]''',
\ 'redraw',
\ "set t_ts=",
\ ], 'Xscript')
endfunc
func Test_terminal_api_call()
if !CanRunVimInTerminal()
return
endif
" Use the title termcap entries to output the escape sequence.
call writefile([
\ 'set title',
\ 'exe "set t_ts=\<Esc>]51; t_fs=\x07"',
\ 'let &titlestring = ''["call","TryThis",["hello",123]]''',
\ 'redraw',
\ "set t_ts=",
\ ], 'Xscript')
call WriteApiCall('Tapi_TryThis')
let buf = RunVimInTerminal('-S Xscript', {})
call WaitFor({-> exists('g:called_bufnum')})
call assert_equal(buf, g:called_bufnum)
@@ -1100,3 +1104,19 @@ func Test_terminal_api_call()
unlet g:called_bufnum
unlet g:called_arg
endfunc
func Test_terminal_api_call_fails()
if !CanRunVimInTerminal()
return
endif
call WriteApiCall('TryThis')
call ch_logfile('Xlog', 'w')
let buf = RunVimInTerminal('-S Xscript', {})
call WaitFor({-> string(readfile('Xlog')) =~ 'Invalid function name: TryThis'})
call StopVimInTerminal(buf)
call delete('Xscript')
call ch_logfile('', '')
call delete('Xlog')
endfunc