home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 5.7.024 < prev    next >
Encoding:
Internet Message Format  |  2001-01-28  |  23.0 KB

  1. To: vim-dev@vim.org
  2. Subject: Patch 5.7.024
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. ------------
  6.  
  7. Patch 5.7.024
  8. Problem:    Evaluating an expression for 'statusline' can have side effects.
  9. Solution:   Evaluate the expression in a sandbox.
  10. Files:        src/edit.c, src/eval.c, src/proto/eval.pro, src/ex_cmds.c,
  11.         src/ex_cmds.h, src/ex_docmd.c, src/globals.h, src/option.c,
  12.         src/screen.c, src/undo.c
  13.  
  14.  
  15. *** ../vim-5.7.23/src/edit.c    Sat Jun 17 21:32:18 2000
  16. --- src/edit.c    Mon Jan 29 20:32:55 2001
  17. ***************
  18. *** 222,227 ****
  19. --- 222,236 ----
  20.        * error message */
  21.       check_for_delay(TRUE);
  22.   
  23. + #ifdef HAVE_SANDBOX
  24. +     /* Don't allow inserting in the sandbox. */
  25. +     if (sandbox != 0)
  26. +     {
  27. +     EMSG(e_sandbox);
  28. +     return FALSE;
  29. +     }
  30. + #endif
  31.   #ifdef INSERT_EXPAND
  32.       ins_compl_clear();        /* clear stuff for ctrl-x mode */
  33.   #endif
  34. *** ../vim-5.7.23/src/eval.c    Thu Nov 16 17:06:52 2000
  35. --- src/eval.c    Mon Jan 29 20:10:22 2001
  36. ***************
  37. *** 320,325 ****
  38. --- 324,350 ----
  39.   
  40.       return retval;
  41.   }
  42. + # if defined(STATUSLINE) || defined(PROTO)
  43. + /*
  44. +  * Call eval_to_string() with "sandbox" set and not using local variables.
  45. +  */
  46. +     char_u *
  47. + eval_to_string_safe(arg, nextcmd)
  48. +     char_u    *arg;
  49. +     char_u    **nextcmd;
  50. + {
  51. +     char_u    *retval;
  52. +     void    *save_funccalp;
  53. +     save_funccalp = save_funccal();
  54. +     ++sandbox;
  55. +     retval = eval_to_string(arg, nextcmd);
  56. +     --sandbox;
  57. +     restore_funccal(save_funccalp);
  58. +     return retval;
  59. + }
  60. + # endif
  61.   
  62.   /*
  63.    * ":let var = expr"    assignment command.
  64. *** ../vim-5.7.23/src/proto/eval.pro    Sat Jun 24 11:18:33 2000
  65. --- src/proto/eval.pro    Mon Jan 29 20:31:34 2001
  66. ***************
  67. *** 2,7 ****
  68. --- 2,8 ----
  69.   void set_internal_string_var __ARGS((char_u *name, char_u *value));
  70.   int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
  71.   char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd));
  72. + char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd));
  73.   void do_let __ARGS((EXARG *eap));
  74.   void set_context_for_expression __ARGS((char_u *arg, CMDIDX cmdidx));
  75.   void do_call __ARGS((EXARG *eap));
  76. *** ../vim-5.7.23/src/ex_cmds.c    Tue Nov 28 22:53:54 2000
  77. --- src/ex_cmds.c    Mon Jan 29 20:32:11 2001
  78. ***************
  79. *** 2961,2966 ****
  80. --- 2961,2977 ----
  81.       emsg(e_curdir);
  82.       return TRUE;
  83.       }
  84. + #ifdef HAVE_SANDBOX
  85. +     /*
  86. +      * In the sandbox more things are not allowed, including the things
  87. +      * disallowed in secure mode.
  88. +      */
  89. +     if (sandbox != 0)
  90. +     {
  91. +     EMSG(e_sandbox);
  92. +     return TRUE;
  93. +     }
  94. + #endif
  95.       return FALSE;
  96.   }
  97.   
  98. *** ../vim-5.7.23/src/ex_cmds.h    Mon Jun 14 18:24:51 1999
  99. --- src/ex_cmds.h    Mon Jan 29 20:27:12 2001
  100. ***************
  101. *** 54,59 ****
  102. --- 54,60 ----
  103.   #define NOTADR     0x4000        /* number before command is not an address */
  104.   #define EDITCMD     0x8000        /* has "+command" argument */
  105.   #define BUFNAME 0x10000        /* accepts buffer name */
  106. + #define SBOXOK    0x40000        /* allowed in the sandbox */
  107.   #define FILES    (XFILE | EXTRA)    /* multiple extra files allowed */
  108.   #define WORD1    (EXTRA | NOSPC)    /* one extra word allowed */
  109.   #define FILE1    (FILES | NOSPC)    /* 1 file allowed, defaults to current file */
  110. ***************
  111. *** 101,107 ****
  112.       EXCMD(CMD_bnext,    "bnext",    BANG|RANGE|NOTADR|COUNT|TRLBAR),
  113.       EXCMD(CMD_bprevious,"bprevious",    BANG|RANGE|NOTADR|COUNT|TRLBAR),
  114.       EXCMD(CMD_brewind,    "brewind",    BANG|RANGE|TRLBAR),
  115. !     EXCMD(CMD_break,    "break",    TRLBAR),
  116.       EXCMD(CMD_browse,    "browse",    NEEDARG|EXTRA|NOTRLCOM),
  117.       EXCMD(CMD_buffers,    "buffers",    TRLBAR),
  118.       EXCMD(CMD_bunload,    "bunload",    BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR),
  119. --- 102,108 ----
  120.       EXCMD(CMD_bnext,    "bnext",    BANG|RANGE|NOTADR|COUNT|TRLBAR),
  121.       EXCMD(CMD_bprevious,"bprevious",    BANG|RANGE|NOTADR|COUNT|TRLBAR),
  122.       EXCMD(CMD_brewind,    "brewind",    BANG|RANGE|TRLBAR),
  123. !     EXCMD(CMD_break,    "break",    TRLBAR|SBOXOK),
  124.       EXCMD(CMD_browse,    "browse",    NEEDARG|EXTRA|NOTRLCOM),
  125.       EXCMD(CMD_buffers,    "buffers",    TRLBAR),
  126.       EXCMD(CMD_bunload,    "bunload",    BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR),
  127. ***************
  128. *** 109,115 ****
  129.       EXCMD(CMD_cNext,    "cNext",    RANGE|NOTADR|COUNT|TRLBAR|BANG),
  130.       EXCMD(CMD_cabbrev,    "cabbrev",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  131.       EXCMD(CMD_cabclear, "cabclear",    TRLBAR),
  132. !     EXCMD(CMD_call,    "call",        RANGE|NEEDARG|EXTRA|NOTRLCOM),
  133.       EXCMD(CMD_cc,    "cc",        RANGE|NOTADR|COUNT|TRLBAR|BANG),
  134.       EXCMD(CMD_cd,    "cd",        NAMEDF|TRLBAR),
  135.       EXCMD(CMD_center,    "center",    TRLBAR|RANGE|EXTRA),
  136. --- 110,116 ----
  137.       EXCMD(CMD_cNext,    "cNext",    RANGE|NOTADR|COUNT|TRLBAR|BANG),
  138.       EXCMD(CMD_cabbrev,    "cabbrev",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  139.       EXCMD(CMD_cabclear, "cabclear",    TRLBAR),
  140. !     EXCMD(CMD_call,    "call",        RANGE|NEEDARG|EXTRA|NOTRLCOM|SBOXOK),
  141.       EXCMD(CMD_cc,    "cc",        RANGE|NOTADR|COUNT|TRLBAR|BANG),
  142.       EXCMD(CMD_cd,    "cd",        NAMEDF|TRLBAR),
  143.       EXCMD(CMD_center,    "center",    TRLBAR|RANGE|EXTRA),
  144. ***************
  145. *** 132,138 ****
  146.       EXCMD(CMD_colder,    "colder",    RANGE|NOTADR|COUNT|TRLBAR),
  147.       EXCMD(CMD_command,    "command",    EXTRA|BANG|NOTRLCOM|USECTRLV),
  148.       EXCMD(CMD_comclear,    "comclear",    TRLBAR),
  149. !     EXCMD(CMD_continue, "continue",    TRLBAR),
  150.       EXCMD(CMD_confirm,  "confirm",    NEEDARG|EXTRA|NOTRLCOM),
  151.       EXCMD(CMD_cprevious,"cprevious",    RANGE|NOTADR|COUNT|TRLBAR|BANG),
  152.       EXCMD(CMD_cquit,    "cquit",    TRLBAR|BANG),
  153. --- 133,139 ----
  154.       EXCMD(CMD_colder,    "colder",    RANGE|NOTADR|COUNT|TRLBAR),
  155.       EXCMD(CMD_command,    "command",    EXTRA|BANG|NOTRLCOM|USECTRLV),
  156.       EXCMD(CMD_comclear,    "comclear",    TRLBAR),
  157. !     EXCMD(CMD_continue, "continue",    TRLBAR|SBOXOK),
  158.       EXCMD(CMD_confirm,  "confirm",    NEEDARG|EXTRA|NOTRLCOM),
  159.       EXCMD(CMD_cprevious,"cprevious",    RANGE|NOTADR|COUNT|TRLBAR|BANG),
  160.       EXCMD(CMD_cquit,    "cquit",    TRLBAR|BANG),
  161. ***************
  162. *** 154,170 ****
  163.       EXCMD(CMD_dsearch,    "dsearch",    BANG|RANGE|DFLALL|EXTRA),
  164.       EXCMD(CMD_dsplit,    "dsplit",    BANG|RANGE|DFLALL|EXTRA),
  165.       EXCMD(CMD_edit,    "edit",        BANG|FILE1|EDITCMD|TRLBAR),
  166. !     EXCMD(CMD_echo,    "echo",        EXTRA|NOTRLCOM),
  167. !     EXCMD(CMD_echohl,    "echohl",    EXTRA|TRLBAR),
  168. !     EXCMD(CMD_echon,    "echon",    EXTRA|NOTRLCOM),
  169. !     EXCMD(CMD_else,    "else",        TRLBAR),
  170. !     EXCMD(CMD_elseif,    "elseif",    EXTRA|NOTRLCOM),
  171.       EXCMD(CMD_exemenu,    "emenu",    NEEDARG+EXTRA+TRLBAR+NOTRLCOM),
  172. !     EXCMD(CMD_endif,    "endif",    TRLBAR),
  173.       EXCMD(CMD_endfunction,"endfunction",TRLBAR),
  174. !     EXCMD(CMD_endwhile,    "endwhile",    TRLBAR),
  175.       EXCMD(CMD_ex,    "ex",        BANG|FILE1|EDITCMD|TRLBAR),
  176. !     EXCMD(CMD_execute,    "execute",    EXTRA|NOTRLCOM),
  177.       EXCMD(CMD_exit,    "exit",        RANGE|BANG|FILE1|DFLALL|TRLBAR),
  178.       EXCMD(CMD_file,    "file",        BANG|FILE1|TRLBAR),
  179.       EXCMD(CMD_files,    "files",    TRLBAR),
  180. --- 155,171 ----
  181.       EXCMD(CMD_dsearch,    "dsearch",    BANG|RANGE|DFLALL|EXTRA),
  182.       EXCMD(CMD_dsplit,    "dsplit",    BANG|RANGE|DFLALL|EXTRA),
  183.       EXCMD(CMD_edit,    "edit",        BANG|FILE1|EDITCMD|TRLBAR),
  184. !     EXCMD(CMD_echo,    "echo",        EXTRA|NOTRLCOM|SBOXOK),
  185. !     EXCMD(CMD_echohl,    "echohl",    EXTRA|TRLBAR|SBOXOK),
  186. !     EXCMD(CMD_echon,    "echon",    EXTRA|NOTRLCOM|SBOXOK),
  187. !     EXCMD(CMD_else,    "else",        TRLBAR|SBOXOK),
  188. !     EXCMD(CMD_elseif,    "elseif",    EXTRA|NOTRLCOM|SBOXOK),
  189.       EXCMD(CMD_exemenu,    "emenu",    NEEDARG+EXTRA+TRLBAR+NOTRLCOM),
  190. !     EXCMD(CMD_endif,    "endif",    TRLBAR|SBOXOK),
  191.       EXCMD(CMD_endfunction,"endfunction",TRLBAR),
  192. !     EXCMD(CMD_endwhile,    "endwhile",    TRLBAR|SBOXOK),
  193.       EXCMD(CMD_ex,    "ex",        BANG|FILE1|EDITCMD|TRLBAR),
  194. !     EXCMD(CMD_execute,    "execute",    EXTRA|NOTRLCOM|SBOXOK),
  195.       EXCMD(CMD_exit,    "exit",        RANGE|BANG|FILE1|DFLALL|TRLBAR),
  196.       EXCMD(CMD_file,    "file",        BANG|FILE1|TRLBAR),
  197.       EXCMD(CMD_files,    "files",    TRLBAR),
  198. ***************
  199. *** 173,191 ****
  200.       EXCMD(CMD_fixdel,    "fixdel",    TRLBAR),
  201.       EXCMD(CMD_function,    "function",    EXTRA|BANG),
  202.       EXCMD(CMD_global,    "global",    RANGE|BANG|EXTRA|DFLALL),
  203. !     EXCMD(CMD_goto,    "goto",        RANGE|NOTADR|COUNT|TRLBAR),
  204.       EXCMD(CMD_grep,    "grep",        NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  205.       EXCMD(CMD_gui,    "gui",        BANG|NAMEDFS|EDITCMD|TRLBAR),
  206.       EXCMD(CMD_gvim,    "gvim",        BANG|NAMEDFS|EDITCMD|TRLBAR),
  207.       EXCMD(CMD_help,    "help",        EXTRA|NOTRLCOM),
  208.       EXCMD(CMD_helpfind,    "helpfind",    EXTRA|NOTRLCOM),
  209. !     EXCMD(CMD_highlight,"highlight",    BANG|EXTRA|TRLBAR),
  210.       EXCMD(CMD_hide,    "hide",        BANG|TRLBAR),
  211.       EXCMD(CMD_history,    "history",    EXTRA|TRLBAR),
  212.       EXCMD(CMD_insert,    "insert",    BANG|RANGE|TRLBAR),
  213.       EXCMD(CMD_iabbrev,    "iabbrev",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  214.       EXCMD(CMD_iabclear, "iabclear",    TRLBAR),
  215. !     EXCMD(CMD_if,    "if",        EXTRA|NOTRLCOM),
  216.       EXCMD(CMD_ijump,    "ijump",    BANG|RANGE|DFLALL|EXTRA),
  217.       EXCMD(CMD_ilist,    "ilist",    BANG|RANGE|DFLALL|EXTRA),
  218.       EXCMD(CMD_imap,    "imap",        EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  219. --- 174,192 ----
  220.       EXCMD(CMD_fixdel,    "fixdel",    TRLBAR),
  221.       EXCMD(CMD_function,    "function",    EXTRA|BANG),
  222.       EXCMD(CMD_global,    "global",    RANGE|BANG|EXTRA|DFLALL),
  223. !     EXCMD(CMD_goto,    "goto",        RANGE|NOTADR|COUNT|TRLBAR|SBOXOK),
  224.       EXCMD(CMD_grep,    "grep",        NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
  225.       EXCMD(CMD_gui,    "gui",        BANG|NAMEDFS|EDITCMD|TRLBAR),
  226.       EXCMD(CMD_gvim,    "gvim",        BANG|NAMEDFS|EDITCMD|TRLBAR),
  227.       EXCMD(CMD_help,    "help",        EXTRA|NOTRLCOM),
  228.       EXCMD(CMD_helpfind,    "helpfind",    EXTRA|NOTRLCOM),
  229. !     EXCMD(CMD_highlight,"highlight",    BANG|EXTRA|TRLBAR|SBOXOK),
  230.       EXCMD(CMD_hide,    "hide",        BANG|TRLBAR),
  231.       EXCMD(CMD_history,    "history",    EXTRA|TRLBAR),
  232.       EXCMD(CMD_insert,    "insert",    BANG|RANGE|TRLBAR),
  233.       EXCMD(CMD_iabbrev,    "iabbrev",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  234.       EXCMD(CMD_iabclear, "iabclear",    TRLBAR),
  235. !     EXCMD(CMD_if,    "if",        EXTRA|NOTRLCOM|SBOXOK),
  236.       EXCMD(CMD_ijump,    "ijump",    BANG|RANGE|DFLALL|EXTRA),
  237.       EXCMD(CMD_ilist,    "ilist",    BANG|RANGE|DFLALL|EXTRA),
  238.       EXCMD(CMD_imap,    "imap",        EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  239. ***************
  240. *** 202,215 ****
  241.       EXCMD(CMD_iunmenu,    "iunmenu",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  242.       EXCMD(CMD_join,    "join",        BANG|RANGE|COUNT|TRLBAR),
  243.       EXCMD(CMD_jumps,    "jumps",    TRLBAR),
  244. !     EXCMD(CMD_k,    "k",        RANGE|WORD1|TRLBAR),
  245.       EXCMD(CMD_list,    "list",        RANGE|COUNT|TRLBAR),
  246.       EXCMD(CMD_last,    "last",        EXTRA|BANG|EDITCMD|TRLBAR),
  247.       EXCMD(CMD_left,    "left",        TRLBAR|RANGE|EXTRA),
  248. !     EXCMD(CMD_let,    "let",        EXTRA|NOTRLCOM),
  249.       EXCMD(CMD_ls,    "ls",        TRLBAR),
  250.       EXCMD(CMD_move,    "move",        RANGE|EXTRA|TRLBAR),
  251. !     EXCMD(CMD_mark,    "mark",        RANGE|WORD1|TRLBAR),
  252.       EXCMD(CMD_make,    "make",        EXTRA|NOTRLCOM|TRLBAR|XFILE),
  253.       EXCMD(CMD_map,    "map",        BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  254.       EXCMD(CMD_mapclear,    "mapclear",    BANG|TRLBAR),
  255. --- 203,216 ----
  256.       EXCMD(CMD_iunmenu,    "iunmenu",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  257.       EXCMD(CMD_join,    "join",        BANG|RANGE|COUNT|TRLBAR),
  258.       EXCMD(CMD_jumps,    "jumps",    TRLBAR),
  259. !     EXCMD(CMD_k,    "k",        RANGE|WORD1|TRLBAR|SBOXOK),
  260.       EXCMD(CMD_list,    "list",        RANGE|COUNT|TRLBAR),
  261.       EXCMD(CMD_last,    "last",        EXTRA|BANG|EDITCMD|TRLBAR),
  262.       EXCMD(CMD_left,    "left",        TRLBAR|RANGE|EXTRA),
  263. !     EXCMD(CMD_let,    "let",        EXTRA|NOTRLCOM|SBOXOK),
  264.       EXCMD(CMD_ls,    "ls",        TRLBAR),
  265.       EXCMD(CMD_move,    "move",        RANGE|EXTRA|TRLBAR),
  266. !     EXCMD(CMD_mark,    "mark",        RANGE|WORD1|TRLBAR|SBOXOK),
  267.       EXCMD(CMD_make,    "make",        EXTRA|NOTRLCOM|TRLBAR|XFILE),
  268.       EXCMD(CMD_map,    "map",        BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  269.       EXCMD(CMD_mapclear,    "mapclear",    BANG|TRLBAR),
  270. ***************
  271. *** 229,238 ****
  272.       EXCMD(CMD_nnoremap, "nnoremap",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  273.       EXCMD(CMD_nnoremenu,"nnoremenu",    RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  274.       EXCMD(CMD_noremap,    "noremap",    BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  275. !     EXCMD(CMD_nohlsearch,"nohlsearch",    TRLBAR),
  276.       EXCMD(CMD_noreabbrev,"noreabbrev",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  277.       EXCMD(CMD_noremenu, "noremenu",    RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  278. !     EXCMD(CMD_normal,    "normal",    RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV),
  279.       EXCMD(CMD_number,    "number",    RANGE|COUNT|TRLBAR),
  280.       EXCMD(CMD_nunmap,    "nunmap",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  281.       EXCMD(CMD_nunmenu,    "nunmenu",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  282. --- 230,239 ----
  283.       EXCMD(CMD_nnoremap, "nnoremap",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  284.       EXCMD(CMD_nnoremenu,"nnoremenu",    RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  285.       EXCMD(CMD_noremap,    "noremap",    BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  286. !     EXCMD(CMD_nohlsearch,"nohlsearch",    TRLBAR|SBOXOK),
  287.       EXCMD(CMD_noreabbrev,"noreabbrev",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  288.       EXCMD(CMD_noremenu, "noremenu",    RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  289. !     EXCMD(CMD_normal,    "normal",    RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK),
  290.       EXCMD(CMD_number,    "number",    RANGE|COUNT|TRLBAR),
  291.       EXCMD(CMD_nunmap,    "nunmap",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  292.       EXCMD(CMD_nunmenu,    "nunmenu",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  293. ***************
  294. *** 248,255 ****
  295.       EXCMD(CMD_ounmenu,    "ounmenu",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  296.       EXCMD(CMD_print,    "print",    RANGE|COUNT|TRLBAR),
  297.       EXCMD(CMD_pclose,    "pclose",    BANG|TRLBAR),
  298. !     EXCMD(CMD_perl,    "perl",        RANGE|EXTRA|DFLALL|NEEDARG),
  299. !     EXCMD(CMD_perldo,    "perldo",    RANGE|EXTRA|DFLALL|NEEDARG),
  300.       EXCMD(CMD_pop,    "pop",        RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
  301.       EXCMD(CMD_ppop,    "ppop",        RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
  302.       EXCMD(CMD_preserve, "preserve",    TRLBAR),
  303. --- 249,256 ----
  304.       EXCMD(CMD_ounmenu,    "ounmenu",    EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  305.       EXCMD(CMD_print,    "print",    RANGE|COUNT|TRLBAR),
  306.       EXCMD(CMD_pclose,    "pclose",    BANG|TRLBAR),
  307. !     EXCMD(CMD_perl,    "perl",        RANGE|EXTRA|DFLALL|NEEDARG|SBOXOK),
  308. !     EXCMD(CMD_perldo,    "perldo",    RANGE|EXTRA|DFLALL|NEEDARG|SBOXOK),
  309.       EXCMD(CMD_pop,    "pop",        RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
  310.       EXCMD(CMD_ppop,    "ppop",        RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
  311.       EXCMD(CMD_preserve, "preserve",    TRLBAR),
  312. ***************
  313. *** 266,273 ****
  314.       EXCMD(CMD_ptselect,    "ptselect",    BANG|TRLBAR|WORD1),
  315.       EXCMD(CMD_put,    "put",        RANGE|BANG|REGSTR|TRLBAR|ZEROR),
  316.       EXCMD(CMD_pwd,    "pwd",        TRLBAR),
  317. !     EXCMD(CMD_python,    "python",    RANGE|EXTRA|NEEDARG),
  318. !     EXCMD(CMD_pyfile,    "pyfile",    RANGE|FILE1|NEEDARG),
  319.       EXCMD(CMD_quit,    "quit",        BANG|TRLBAR),
  320.       EXCMD(CMD_qall,    "qall",        BANG|TRLBAR),
  321.       EXCMD(CMD_read,    "read",        BANG|RANGE|NAMEDF|TRLBAR|ZEROR),
  322. --- 267,274 ----
  323.       EXCMD(CMD_ptselect,    "ptselect",    BANG|TRLBAR|WORD1),
  324.       EXCMD(CMD_put,    "put",        RANGE|BANG|REGSTR|TRLBAR|ZEROR),
  325.       EXCMD(CMD_pwd,    "pwd",        TRLBAR),
  326. !     EXCMD(CMD_python,    "python",    RANGE|EXTRA|NEEDARG|SBOXOK),
  327. !     EXCMD(CMD_pyfile,    "pyfile",    RANGE|FILE1|NEEDARG|SBOXOK),
  328.       EXCMD(CMD_quit,    "quit",        BANG|TRLBAR),
  329.       EXCMD(CMD_qall,    "qall",        BANG|TRLBAR),
  330.       EXCMD(CMD_read,    "read",        BANG|RANGE|NAMEDF|TRLBAR|ZEROR),
  331. ***************
  332. *** 277,283 ****
  333.       EXCMD(CMD_registers,"registers",    EXTRA|NOTRLCOM|TRLBAR),
  334.       EXCMD(CMD_resize,    "resize",    TRLBAR|WORD1),
  335.       EXCMD(CMD_retab,    "retab",    TRLBAR|RANGE|DFLALL|BANG|WORD1),
  336. !     EXCMD(CMD_return,    "return",    EXTRA|NOTRLCOM),
  337.       EXCMD(CMD_rewind,    "rewind",    EXTRA|BANG|EDITCMD|TRLBAR),
  338.       EXCMD(CMD_right,    "right",    TRLBAR|RANGE|EXTRA),
  339.       EXCMD(CMD_rviminfo, "rviminfo",    BANG|FILE1|TRLBAR),
  340. --- 278,284 ----
  341.       EXCMD(CMD_registers,"registers",    EXTRA|NOTRLCOM|TRLBAR),
  342.       EXCMD(CMD_resize,    "resize",    TRLBAR|WORD1),
  343.       EXCMD(CMD_retab,    "retab",    TRLBAR|RANGE|DFLALL|BANG|WORD1),
  344. !     EXCMD(CMD_return,    "return",    EXTRA|NOTRLCOM|SBOXOK),
  345.       EXCMD(CMD_rewind,    "rewind",    EXTRA|BANG|EDITCMD|TRLBAR),
  346.       EXCMD(CMD_right,    "right",    TRLBAR|RANGE|EXTRA),
  347.       EXCMD(CMD_rviminfo, "rviminfo",    BANG|FILE1|TRLBAR),
  348. ***************
  349. *** 305,311 ****
  350.       EXCMD(CMD_snext,    "snext",    RANGE|NOTADR|BANG|NAMEDFS|EDITCMD|TRLBAR),
  351.       EXCMD(CMD_sniff,    "sniff",    EXTRA|TRLBAR),
  352.       EXCMD(CMD_snomagic,    "snomagic",    RANGE|EXTRA),
  353. !     EXCMD(CMD_source,    "source",    BANG|NAMEDF|TRLBAR),
  354.       EXCMD(CMD_split,    "split",    BANG|FILE1|RANGE|NOTADR|EDITCMD|TRLBAR),
  355.       EXCMD(CMD_sprevious,"sprevious",    EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|TRLBAR),
  356.       EXCMD(CMD_srewind,    "srewind",    EXTRA|BANG|EDITCMD|TRLBAR),
  357. --- 306,312 ----
  358.       EXCMD(CMD_snext,    "snext",    RANGE|NOTADR|BANG|NAMEDFS|EDITCMD|TRLBAR),
  359.       EXCMD(CMD_sniff,    "sniff",    EXTRA|TRLBAR),
  360.       EXCMD(CMD_snomagic,    "snomagic",    RANGE|EXTRA),
  361. !     EXCMD(CMD_source,    "source",    BANG|NAMEDF|TRLBAR|SBOXOK),
  362.       EXCMD(CMD_split,    "split",    BANG|FILE1|RANGE|NOTADR|EDITCMD|TRLBAR),
  363.       EXCMD(CMD_sprevious,"sprevious",    EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|TRLBAR),
  364.       EXCMD(CMD_srewind,    "srewind",    EXTRA|BANG|EDITCMD|TRLBAR),
  365. ***************
  366. *** 324,332 ****
  367.       EXCMD(CMD_tNext,    "tNext",    RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  368.       EXCMD(CMD_tag,    "tag",        RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR),
  369.       EXCMD(CMD_tags,    "tags",        TRLBAR),
  370. !     EXCMD(CMD_tcl,    "tcl",        RANGE|EXTRA|NEEDARG),
  371. !     EXCMD(CMD_tcldo,    "tcldo",    RANGE|DFLALL|EXTRA|NEEDARG),
  372. !     EXCMD(CMD_tclfile,    "tclfile",    RANGE|FILE1|NEEDARG),
  373.       EXCMD(CMD_tearoff,    "tearoff",    NEEDARG|EXTRA|TRLBAR|NOTRLCOM),
  374.       EXCMD(CMD_tjump,    "tjump",    BANG|TRLBAR|WORD1),
  375.       EXCMD(CMD_tlast,    "tlast",    BANG|TRLBAR),
  376. --- 325,333 ----
  377.       EXCMD(CMD_tNext,    "tNext",    RANGE|NOTADR|BANG|TRLBAR|ZEROR),
  378.       EXCMD(CMD_tag,    "tag",        RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR),
  379.       EXCMD(CMD_tags,    "tags",        TRLBAR),
  380. !     EXCMD(CMD_tcl,    "tcl",        RANGE|EXTRA|NEEDARG|SBOXOK),
  381. !     EXCMD(CMD_tcldo,    "tcldo",    RANGE|DFLALL|EXTRA|NEEDARG|SBOXOK),
  382. !     EXCMD(CMD_tclfile,    "tclfile",    RANGE|FILE1|NEEDARG|SBOXOK),
  383.       EXCMD(CMD_tearoff,    "tearoff",    NEEDARG|EXTRA|TRLBAR|NOTRLCOM),
  384.       EXCMD(CMD_tjump,    "tjump",    BANG|TRLBAR|WORD1),
  385.       EXCMD(CMD_tlast,    "tlast",    BANG|TRLBAR),
  386. ***************
  387. *** 339,345 ****
  388.       EXCMD(CMD_undo,    "undo",        TRLBAR),
  389.       EXCMD(CMD_unabbreviate,"unabbreviate",EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  390.       EXCMD(CMD_unhide,    "unhide",    RANGE|NOTADR|COUNT|TRLBAR),
  391. !     EXCMD(CMD_unlet,    "unlet",    BANG|EXTRA|NEEDARG|TRLBAR),
  392.       EXCMD(CMD_unmap,    "unmap",    BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  393.       EXCMD(CMD_unmenu,    "unmenu",    BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  394.       EXCMD(CMD_update,    "update",    RANGE|BANG|FILE1|DFLALL|TRLBAR),
  395. --- 340,346 ----
  396.       EXCMD(CMD_undo,    "undo",        TRLBAR),
  397.       EXCMD(CMD_unabbreviate,"unabbreviate",EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  398.       EXCMD(CMD_unhide,    "unhide",    RANGE|NOTADR|COUNT|TRLBAR),
  399. !     EXCMD(CMD_unlet,    "unlet",    BANG|EXTRA|NEEDARG|TRLBAR|SBOXOK),
  400.       EXCMD(CMD_unmap,    "unmap",    BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  401.       EXCMD(CMD_unmenu,    "unmenu",    BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
  402.       EXCMD(CMD_update,    "update",    RANGE|BANG|FILE1|DFLALL|TRLBAR),
  403. ***************
  404. *** 357,363 ****
  405.       EXCMD(CMD_write,    "write",    RANGE|BANG|FILE1|DFLALL|TRLBAR),
  406.       EXCMD(CMD_wNext,    "wNext",    RANGE|NOTADR|BANG|FILE1|TRLBAR),
  407.       EXCMD(CMD_wall,    "wall",        BANG|TRLBAR),
  408. !     EXCMD(CMD_while,    "while",    EXTRA|NOTRLCOM),
  409.       EXCMD(CMD_winsize,    "winsize",    EXTRA|NEEDARG|TRLBAR),
  410.       EXCMD(CMD_winpos,    "winpos",    EXTRA|TRLBAR),
  411.       EXCMD(CMD_wnext,    "wnext",    RANGE|NOTADR|BANG|FILE1|TRLBAR),
  412. --- 358,364 ----
  413.       EXCMD(CMD_write,    "write",    RANGE|BANG|FILE1|DFLALL|TRLBAR),
  414.       EXCMD(CMD_wNext,    "wNext",    RANGE|NOTADR|BANG|FILE1|TRLBAR),
  415.       EXCMD(CMD_wall,    "wall",        BANG|TRLBAR),
  416. !     EXCMD(CMD_while,    "while",    EXTRA|NOTRLCOM|SBOXOK),
  417.       EXCMD(CMD_winsize,    "winsize",    EXTRA|NEEDARG|TRLBAR),
  418.       EXCMD(CMD_winpos,    "winpos",    EXTRA|TRLBAR),
  419.       EXCMD(CMD_wnext,    "wnext",    RANGE|NOTADR|BANG|FILE1|TRLBAR),
  420. *** ../vim-5.7.23/src/ex_docmd.c    Sun Oct 22 16:43:53 2000
  421. --- src/ex_docmd.c    Mon Jan 29 20:32:24 2001
  422. ***************
  423. *** 1027,1032 ****
  424. --- 1027,1041 ----
  425.   #endif
  426.       ea.argt = cmdnames[(int)ea.cmdidx].cmd_argt;
  427.   
  428. + #ifdef HAVE_SANDBOX
  429. +     if (sandbox != 0 && !(ea.argt & SBOXOK))
  430. +     {
  431. +     /* Command not allowed in sandbox. */
  432. +     errormsg = e_sandbox;
  433. +     goto doend;
  434. +     }
  435. + #endif
  436.       if (!(ea.argt & RANGE) && ea.addr_count)    /* no range allowed */
  437.       {
  438.       errormsg = e_norange;
  439. *** ../vim-5.7.23/src/globals.h    Tue Jun 20 21:28:04 2000
  440. --- src/globals.h    Mon Jan 29 20:32:44 2001
  441. ***************
  442. *** 319,324 ****
  443. --- 319,332 ----
  444.                    * allowed, e.g. when sourcing .exrc or .vimrc
  445.                    * in current directory */
  446.   
  447. + #if defined(STATUSLINE) && defined(WANT_EVAL)
  448. + # define HAVE_SANDBOX
  449. + EXTERN int    sandbox INIT(= 0);
  450. +                 /* non-zero when evaluating an expression in a
  451. +                  * "sandbox".  Not allowed to change the
  452. +                  * buffer. */
  453. + #endif
  454.   EXTERN int    silent_mode INIT(= FALSE);
  455.                   /* set to TRUE when "-s" commandline argument
  456.                    * used for ex */
  457. ***************
  458. *** 779,784 ****
  459. --- 787,795 ----
  460.   #endif
  461.   #ifdef QUICKFIX
  462.   EXTERN char_u e_readerrf[]    INIT(="Error while reading errorfile");
  463. + #endif
  464. + #ifdef HAVE_SANDBOX
  465. + EXTERN char_u e_sandbox[]    INIT(="Not allowed in sandbox");
  466.   #endif
  467.   EXTERN char_u e_scroll[]    INIT(="Invalid scroll size");
  468.   EXTERN char_u e_tagformat[]    INIT(="Format error in tags file \"%s\"");
  469. *** ../vim-5.7.23/src/option.c    Wed Jun  7 12:56:08 2000
  470. --- src/option.c    Mon Jan 29 20:17:58 2001
  471. ***************
  472. *** 3855,3861 ****
  473.        * in secure mode, setting of the secure option is not
  474.        * allowed
  475.        */
  476. !     if (secure && (int *)varp == &p_secure)
  477.       return (char_u *)"not allowed here";
  478.   
  479.   #ifdef USE_GUI
  480. --- 3855,3865 ----
  481.        * in secure mode, setting of the secure option is not
  482.        * allowed
  483.        */
  484. !     if ((secure
  485. ! #ifdef HAVE_SANDBOX
  486. !         || sandbox != 0
  487. ! #endif
  488. !         ) && (int *)varp == &p_secure)
  489.       return (char_u *)"not allowed here";
  490.   
  491.   #ifdef USE_GUI
  492. *** ../vim-5.7.23/src/screen.c    Mon Jan  8 11:50:35 2001
  493. --- src/screen.c    Mon Jan 29 19:56:10 2001
  494. ***************
  495. *** 2876,2882 ****
  496.           curwin = wp;
  497.           curbuf = wp->w_buffer;
  498.   
  499. !         str = eval_to_string(p, &t);
  500.           if (str != NULL && *str != 0)
  501.           {
  502.           t = str;
  503. --- 2876,2882 ----
  504.           curwin = wp;
  505.           curbuf = wp->w_buffer;
  506.   
  507. !         str = eval_to_string_safe(p, &t);
  508.           if (str != NULL && *str != 0)
  509.           {
  510.           t = str;
  511. *** ../vim-5.7.23/src/undo.c    Sun Oct 31 16:18:20 1999
  512. --- src/undo.c    Mon Jan 29 20:34:03 2001
  513. ***************
  514. *** 155,160 ****
  515. --- 155,172 ----
  516.       struct u_entry  *uep;
  517.       long        size;
  518.   
  519. + #ifdef HAVE_SANDBOX
  520. +     /*
  521. +      * In the sandbox it's not allowed to change the text.  Letting the
  522. +      * undo fail is a crude way to make all change commands fail.
  523. +      */
  524. +     if (sandbox != 0)
  525. +     {
  526. +     EMSG(e_sandbox);
  527. +     return FAIL;
  528. +     }
  529. + #endif
  530.       /*
  531.        * if curbuf->b_u_synced == TRUE make a new header
  532.        */
  533. ***************
  534. *** 314,319 ****
  535. --- 326,340 ----
  536.   u_doit(count)
  537.       int count;
  538.   {
  539. + #ifdef HAVE_SANDBOX
  540. +     /* In the sandbox it's not allowed to change the text. */
  541. +     if (sandbox != 0)
  542. +     {
  543. +     EMSG(e_sandbox);
  544. +     return;
  545. +     }
  546. + #endif
  547.       u_newcount = 0;
  548.       u_oldcount = 0;
  549.       while (count--)
  550. *** ../vim-5.7.23/src/version.c    Thu Jan 18 14:01:55 2001
  551. --- src/version.c    Mon Jan 29 20:50:45 2001
  552. ***************
  553. *** 439,440 ****
  554. --- 439,442 ----
  555.   {   /* Add new patch number below this line */
  556. + /**/
  557. +     24,
  558.   /**/
  559.  
  560. -- 
  561. hundred-and-one symptoms of being an internet addict:
  562. 70. ISDN lines are added to your house on a hourly basis
  563.  
  564.  ///  Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net  \\\
  565. (((   Creator of Vim - http://www.vim.org -- ftp://ftp.vim.org/pub/vim   )))
  566.  \\\  Help me helping AIDS orphans in Uganda - http://iccf-holland.org  ///
  567.