1

我正在查看一些名为 vim_latex ( http://vim-latex.sourceforge.net/ ) 的 latex_suite 代码,我在名为 "templates.vim" 的文件中发现了一些有趣的行:

" Back-Door to trojans !!!
 function! <SID>Compute(what)
     exe a:what
     if exists('s:comTemp')
         return s:comTemp.s:comTemp
     else
         return ''
     endif
endfunction

好吧,我不是 vim 代码方面的专家,所以我无法解释这些行,除了让我有点害怕的评论。你们知道发生了什么吗?

编辑: 该函数似乎只被以下一个调用:

" ProcessTemplate: processes the special characters in template file. {{{
"                  This implementation follows from Gergely Kontra's
"                  mu-template.vim
"                  http://vim.sourceforge.net/scripts/script.php?script_id=222
function! <SID>ProcessTemplate()
  if exists('s:phsTemp') && s:phsTemp != ''
    exec 'silent! %s/^'.s:comTemp.'\(\_.\{-}\)'.s:comTemp.'$/\=<SID>Compute(submatch(1))/ge'
    exec 'silent! %s/'.s:exeTemp.'\(.\{-}\)'.s:exeTemp.'/\=<SID>Exec(submatch(1))/ge'
    exec 'silent! g/'.s:comTemp.s:comTemp.'/d'  
    " A function only puts one item into the search history...
    call Tex_CleanSearchHistory()
  endif
endfunction

根据头文件描述,这些函数的目的是处理位于特定目录中的模板。

4

1 回答 1

1

我认为该评论旨在作为警告。该函数<SID>ProcessTemplate()遍历模板文件,查找某些(可配置的)模式,并<SID>Compute(what)在参数what是从模板中提取的文本的情况下调用。注意行:exe a:what

如果您从不受信任的来源安装模板文件,则可能会发生不好的事情。

当然,如果您从不受信任的来源安装 vim 插件,同样会发生同样糟糕的事情。将恶意软件放入模板文件会增加一些间接级别,使其更难实施和诊断。

这段代码可能是在将命令添加到 vim 之前编写的:sandbox,这可能是使这段代码更安全的一种简单方法。我没有查看沙箱中允许的内容,并将其与此模板处理的预期用途进行了比较。

于 2014-03-14T16:39:38.880 回答