4 From: Bram Moolenaar <Bram@moolenaar.net>
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
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
21 check_for_delay(TRUE);
24 + /* Don't allow inserting in the sandbox. */
33 ins_compl_clear(); /* clear stuff for ctrl-x mode */
35 *** ../vim-5.7.23/src/eval.c Thu Nov 16 17:06:52 2000
36 --- src/eval.c Mon Jan 29 20:10:22 2001
44 + # if defined(STATUSLINE) || defined(PROTO)
46 + * Call eval_to_string() with "sandbox" set and not using local variables.
49 + eval_to_string_safe(arg, nextcmd)
54 + void *save_funccalp;
56 + save_funccalp = save_funccal();
58 + retval = eval_to_string(arg, nextcmd);
60 + restore_funccal(save_funccalp);
66 * ":let var = expr" assignment command.
67 *** ../vim-5.7.23/src/proto/eval.pro Sat Jun 24 11:18:33 2000
68 --- src/proto/eval.pro Mon Jan 29 20:31:34 2001
72 void set_internal_string_var __ARGS((char_u *name, char_u *value));
73 int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
74 char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd));
75 + char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd));
76 void do_let __ARGS((EXARG *eap));
77 void set_context_for_expression __ARGS((char_u *arg, CMDIDX cmdidx));
78 void do_call __ARGS((EXARG *eap));
79 *** ../vim-5.7.23/src/ex_cmds.c Tue Nov 28 22:53:54 2000
80 --- src/ex_cmds.c Mon Jan 29 20:32:11 2001
89 + * In the sandbox more things are not allowed, including the things
90 + * disallowed in secure mode.
101 *** ../vim-5.7.23/src/ex_cmds.h Mon Jun 14 18:24:51 1999
102 --- src/ex_cmds.h Mon Jan 29 20:27:12 2001
106 #define NOTADR 0x4000 /* number before command is not an address */
107 #define EDITCMD 0x8000 /* has "+command" argument */
108 #define BUFNAME 0x10000 /* accepts buffer name */
109 + #define SBOXOK 0x40000 /* allowed in the sandbox */
110 #define FILES (XFILE | EXTRA) /* multiple extra files allowed */
111 #define WORD1 (EXTRA | NOSPC) /* one extra word allowed */
112 #define FILE1 (FILES | NOSPC) /* 1 file allowed, defaults to current file */
115 EXCMD(CMD_bnext, "bnext", BANG|RANGE|NOTADR|COUNT|TRLBAR),
116 EXCMD(CMD_bprevious,"bprevious", BANG|RANGE|NOTADR|COUNT|TRLBAR),
117 EXCMD(CMD_brewind, "brewind", BANG|RANGE|TRLBAR),
118 ! EXCMD(CMD_break, "break", TRLBAR),
119 EXCMD(CMD_browse, "browse", NEEDARG|EXTRA|NOTRLCOM),
120 EXCMD(CMD_buffers, "buffers", TRLBAR),
121 EXCMD(CMD_bunload, "bunload", BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR),
123 EXCMD(CMD_bnext, "bnext", BANG|RANGE|NOTADR|COUNT|TRLBAR),
124 EXCMD(CMD_bprevious,"bprevious", BANG|RANGE|NOTADR|COUNT|TRLBAR),
125 EXCMD(CMD_brewind, "brewind", BANG|RANGE|TRLBAR),
126 ! EXCMD(CMD_break, "break", TRLBAR|SBOXOK),
127 EXCMD(CMD_browse, "browse", NEEDARG|EXTRA|NOTRLCOM),
128 EXCMD(CMD_buffers, "buffers", TRLBAR),
129 EXCMD(CMD_bunload, "bunload", BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR),
132 EXCMD(CMD_cNext, "cNext", RANGE|NOTADR|COUNT|TRLBAR|BANG),
133 EXCMD(CMD_cabbrev, "cabbrev", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
134 EXCMD(CMD_cabclear, "cabclear", TRLBAR),
135 ! EXCMD(CMD_call, "call", RANGE|NEEDARG|EXTRA|NOTRLCOM),
136 EXCMD(CMD_cc, "cc", RANGE|NOTADR|COUNT|TRLBAR|BANG),
137 EXCMD(CMD_cd, "cd", NAMEDF|TRLBAR),
138 EXCMD(CMD_center, "center", TRLBAR|RANGE|EXTRA),
140 EXCMD(CMD_cNext, "cNext", RANGE|NOTADR|COUNT|TRLBAR|BANG),
141 EXCMD(CMD_cabbrev, "cabbrev", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
142 EXCMD(CMD_cabclear, "cabclear", TRLBAR),
143 ! EXCMD(CMD_call, "call", RANGE|NEEDARG|EXTRA|NOTRLCOM|SBOXOK),
144 EXCMD(CMD_cc, "cc", RANGE|NOTADR|COUNT|TRLBAR|BANG),
145 EXCMD(CMD_cd, "cd", NAMEDF|TRLBAR),
146 EXCMD(CMD_center, "center", TRLBAR|RANGE|EXTRA),
149 EXCMD(CMD_colder, "colder", RANGE|NOTADR|COUNT|TRLBAR),
150 EXCMD(CMD_command, "command", EXTRA|BANG|NOTRLCOM|USECTRLV),
151 EXCMD(CMD_comclear, "comclear", TRLBAR),
152 ! EXCMD(CMD_continue, "continue", TRLBAR),
153 EXCMD(CMD_confirm, "confirm", NEEDARG|EXTRA|NOTRLCOM),
154 EXCMD(CMD_cprevious,"cprevious", RANGE|NOTADR|COUNT|TRLBAR|BANG),
155 EXCMD(CMD_cquit, "cquit", TRLBAR|BANG),
157 EXCMD(CMD_colder, "colder", RANGE|NOTADR|COUNT|TRLBAR),
158 EXCMD(CMD_command, "command", EXTRA|BANG|NOTRLCOM|USECTRLV),
159 EXCMD(CMD_comclear, "comclear", TRLBAR),
160 ! EXCMD(CMD_continue, "continue", TRLBAR|SBOXOK),
161 EXCMD(CMD_confirm, "confirm", NEEDARG|EXTRA|NOTRLCOM),
162 EXCMD(CMD_cprevious,"cprevious", RANGE|NOTADR|COUNT|TRLBAR|BANG),
163 EXCMD(CMD_cquit, "cquit", TRLBAR|BANG),
166 EXCMD(CMD_dsearch, "dsearch", BANG|RANGE|DFLALL|EXTRA),
167 EXCMD(CMD_dsplit, "dsplit", BANG|RANGE|DFLALL|EXTRA),
168 EXCMD(CMD_edit, "edit", BANG|FILE1|EDITCMD|TRLBAR),
169 ! EXCMD(CMD_echo, "echo", EXTRA|NOTRLCOM),
170 ! EXCMD(CMD_echohl, "echohl", EXTRA|TRLBAR),
171 ! EXCMD(CMD_echon, "echon", EXTRA|NOTRLCOM),
172 ! EXCMD(CMD_else, "else", TRLBAR),
173 ! EXCMD(CMD_elseif, "elseif", EXTRA|NOTRLCOM),
174 EXCMD(CMD_exemenu, "emenu", NEEDARG+EXTRA+TRLBAR+NOTRLCOM),
175 ! EXCMD(CMD_endif, "endif", TRLBAR),
176 EXCMD(CMD_endfunction,"endfunction",TRLBAR),
177 ! EXCMD(CMD_endwhile, "endwhile", TRLBAR),
178 EXCMD(CMD_ex, "ex", BANG|FILE1|EDITCMD|TRLBAR),
179 ! EXCMD(CMD_execute, "execute", EXTRA|NOTRLCOM),
180 EXCMD(CMD_exit, "exit", RANGE|BANG|FILE1|DFLALL|TRLBAR),
181 EXCMD(CMD_file, "file", BANG|FILE1|TRLBAR),
182 EXCMD(CMD_files, "files", TRLBAR),
184 EXCMD(CMD_dsearch, "dsearch", BANG|RANGE|DFLALL|EXTRA),
185 EXCMD(CMD_dsplit, "dsplit", BANG|RANGE|DFLALL|EXTRA),
186 EXCMD(CMD_edit, "edit", BANG|FILE1|EDITCMD|TRLBAR),
187 ! EXCMD(CMD_echo, "echo", EXTRA|NOTRLCOM|SBOXOK),
188 ! EXCMD(CMD_echohl, "echohl", EXTRA|TRLBAR|SBOXOK),
189 ! EXCMD(CMD_echon, "echon", EXTRA|NOTRLCOM|SBOXOK),
190 ! EXCMD(CMD_else, "else", TRLBAR|SBOXOK),
191 ! EXCMD(CMD_elseif, "elseif", EXTRA|NOTRLCOM|SBOXOK),
192 EXCMD(CMD_exemenu, "emenu", NEEDARG+EXTRA+TRLBAR+NOTRLCOM),
193 ! EXCMD(CMD_endif, "endif", TRLBAR|SBOXOK),
194 EXCMD(CMD_endfunction,"endfunction",TRLBAR),
195 ! EXCMD(CMD_endwhile, "endwhile", TRLBAR|SBOXOK),
196 EXCMD(CMD_ex, "ex", BANG|FILE1|EDITCMD|TRLBAR),
197 ! EXCMD(CMD_execute, "execute", EXTRA|NOTRLCOM|SBOXOK),
198 EXCMD(CMD_exit, "exit", RANGE|BANG|FILE1|DFLALL|TRLBAR),
199 EXCMD(CMD_file, "file", BANG|FILE1|TRLBAR),
200 EXCMD(CMD_files, "files", TRLBAR),
203 EXCMD(CMD_fixdel, "fixdel", TRLBAR),
204 EXCMD(CMD_function, "function", EXTRA|BANG),
205 EXCMD(CMD_global, "global", RANGE|BANG|EXTRA|DFLALL),
206 ! EXCMD(CMD_goto, "goto", RANGE|NOTADR|COUNT|TRLBAR),
207 EXCMD(CMD_grep, "grep", NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
208 EXCMD(CMD_gui, "gui", BANG|NAMEDFS|EDITCMD|TRLBAR),
209 EXCMD(CMD_gvim, "gvim", BANG|NAMEDFS|EDITCMD|TRLBAR),
210 EXCMD(CMD_help, "help", EXTRA|NOTRLCOM),
211 EXCMD(CMD_helpfind, "helpfind", EXTRA|NOTRLCOM),
212 ! EXCMD(CMD_highlight,"highlight", BANG|EXTRA|TRLBAR),
213 EXCMD(CMD_hide, "hide", BANG|TRLBAR),
214 EXCMD(CMD_history, "history", EXTRA|TRLBAR),
215 EXCMD(CMD_insert, "insert", BANG|RANGE|TRLBAR),
216 EXCMD(CMD_iabbrev, "iabbrev", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
217 EXCMD(CMD_iabclear, "iabclear", TRLBAR),
218 ! EXCMD(CMD_if, "if", EXTRA|NOTRLCOM),
219 EXCMD(CMD_ijump, "ijump", BANG|RANGE|DFLALL|EXTRA),
220 EXCMD(CMD_ilist, "ilist", BANG|RANGE|DFLALL|EXTRA),
221 EXCMD(CMD_imap, "imap", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
223 EXCMD(CMD_fixdel, "fixdel", TRLBAR),
224 EXCMD(CMD_function, "function", EXTRA|BANG),
225 EXCMD(CMD_global, "global", RANGE|BANG|EXTRA|DFLALL),
226 ! EXCMD(CMD_goto, "goto", RANGE|NOTADR|COUNT|TRLBAR|SBOXOK),
227 EXCMD(CMD_grep, "grep", NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
228 EXCMD(CMD_gui, "gui", BANG|NAMEDFS|EDITCMD|TRLBAR),
229 EXCMD(CMD_gvim, "gvim", BANG|NAMEDFS|EDITCMD|TRLBAR),
230 EXCMD(CMD_help, "help", EXTRA|NOTRLCOM),
231 EXCMD(CMD_helpfind, "helpfind", EXTRA|NOTRLCOM),
232 ! EXCMD(CMD_highlight,"highlight", BANG|EXTRA|TRLBAR|SBOXOK),
233 EXCMD(CMD_hide, "hide", BANG|TRLBAR),
234 EXCMD(CMD_history, "history", EXTRA|TRLBAR),
235 EXCMD(CMD_insert, "insert", BANG|RANGE|TRLBAR),
236 EXCMD(CMD_iabbrev, "iabbrev", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
237 EXCMD(CMD_iabclear, "iabclear", TRLBAR),
238 ! EXCMD(CMD_if, "if", EXTRA|NOTRLCOM|SBOXOK),
239 EXCMD(CMD_ijump, "ijump", BANG|RANGE|DFLALL|EXTRA),
240 EXCMD(CMD_ilist, "ilist", BANG|RANGE|DFLALL|EXTRA),
241 EXCMD(CMD_imap, "imap", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
244 EXCMD(CMD_iunmenu, "iunmenu", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
245 EXCMD(CMD_join, "join", BANG|RANGE|COUNT|TRLBAR),
246 EXCMD(CMD_jumps, "jumps", TRLBAR),
247 ! EXCMD(CMD_k, "k", RANGE|WORD1|TRLBAR),
248 EXCMD(CMD_list, "list", RANGE|COUNT|TRLBAR),
249 EXCMD(CMD_last, "last", EXTRA|BANG|EDITCMD|TRLBAR),
250 EXCMD(CMD_left, "left", TRLBAR|RANGE|EXTRA),
251 ! EXCMD(CMD_let, "let", EXTRA|NOTRLCOM),
252 EXCMD(CMD_ls, "ls", TRLBAR),
253 EXCMD(CMD_move, "move", RANGE|EXTRA|TRLBAR),
254 ! EXCMD(CMD_mark, "mark", RANGE|WORD1|TRLBAR),
255 EXCMD(CMD_make, "make", EXTRA|NOTRLCOM|TRLBAR|XFILE),
256 EXCMD(CMD_map, "map", BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
257 EXCMD(CMD_mapclear, "mapclear", BANG|TRLBAR),
259 EXCMD(CMD_iunmenu, "iunmenu", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
260 EXCMD(CMD_join, "join", BANG|RANGE|COUNT|TRLBAR),
261 EXCMD(CMD_jumps, "jumps", TRLBAR),
262 ! EXCMD(CMD_k, "k", RANGE|WORD1|TRLBAR|SBOXOK),
263 EXCMD(CMD_list, "list", RANGE|COUNT|TRLBAR),
264 EXCMD(CMD_last, "last", EXTRA|BANG|EDITCMD|TRLBAR),
265 EXCMD(CMD_left, "left", TRLBAR|RANGE|EXTRA),
266 ! EXCMD(CMD_let, "let", EXTRA|NOTRLCOM|SBOXOK),
267 EXCMD(CMD_ls, "ls", TRLBAR),
268 EXCMD(CMD_move, "move", RANGE|EXTRA|TRLBAR),
269 ! EXCMD(CMD_mark, "mark", RANGE|WORD1|TRLBAR|SBOXOK),
270 EXCMD(CMD_make, "make", EXTRA|NOTRLCOM|TRLBAR|XFILE),
271 EXCMD(CMD_map, "map", BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
272 EXCMD(CMD_mapclear, "mapclear", BANG|TRLBAR),
275 EXCMD(CMD_nnoremap, "nnoremap", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
276 EXCMD(CMD_nnoremenu,"nnoremenu", RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
277 EXCMD(CMD_noremap, "noremap", BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
278 ! EXCMD(CMD_nohlsearch,"nohlsearch", TRLBAR),
279 EXCMD(CMD_noreabbrev,"noreabbrev", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
280 EXCMD(CMD_noremenu, "noremenu", RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
281 ! EXCMD(CMD_normal, "normal", RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV),
282 EXCMD(CMD_number, "number", RANGE|COUNT|TRLBAR),
283 EXCMD(CMD_nunmap, "nunmap", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
284 EXCMD(CMD_nunmenu, "nunmenu", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
286 EXCMD(CMD_nnoremap, "nnoremap", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
287 EXCMD(CMD_nnoremenu,"nnoremenu", RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
288 EXCMD(CMD_noremap, "noremap", BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
289 ! EXCMD(CMD_nohlsearch,"nohlsearch", TRLBAR|SBOXOK),
290 EXCMD(CMD_noreabbrev,"noreabbrev", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
291 EXCMD(CMD_noremenu, "noremenu", RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
292 ! EXCMD(CMD_normal, "normal", RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK),
293 EXCMD(CMD_number, "number", RANGE|COUNT|TRLBAR),
294 EXCMD(CMD_nunmap, "nunmap", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
295 EXCMD(CMD_nunmenu, "nunmenu", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
298 EXCMD(CMD_ounmenu, "ounmenu", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
299 EXCMD(CMD_print, "print", RANGE|COUNT|TRLBAR),
300 EXCMD(CMD_pclose, "pclose", BANG|TRLBAR),
301 ! EXCMD(CMD_perl, "perl", RANGE|EXTRA|DFLALL|NEEDARG),
302 ! EXCMD(CMD_perldo, "perldo", RANGE|EXTRA|DFLALL|NEEDARG),
303 EXCMD(CMD_pop, "pop", RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
304 EXCMD(CMD_ppop, "ppop", RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
305 EXCMD(CMD_preserve, "preserve", TRLBAR),
307 EXCMD(CMD_ounmenu, "ounmenu", EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
308 EXCMD(CMD_print, "print", RANGE|COUNT|TRLBAR),
309 EXCMD(CMD_pclose, "pclose", BANG|TRLBAR),
310 ! EXCMD(CMD_perl, "perl", RANGE|EXTRA|DFLALL|NEEDARG|SBOXOK),
311 ! EXCMD(CMD_perldo, "perldo", RANGE|EXTRA|DFLALL|NEEDARG|SBOXOK),
312 EXCMD(CMD_pop, "pop", RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
313 EXCMD(CMD_ppop, "ppop", RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR),
314 EXCMD(CMD_preserve, "preserve", TRLBAR),
317 EXCMD(CMD_ptselect, "ptselect", BANG|TRLBAR|WORD1),
318 EXCMD(CMD_put, "put", RANGE|BANG|REGSTR|TRLBAR|ZEROR),
319 EXCMD(CMD_pwd, "pwd", TRLBAR),
320 ! EXCMD(CMD_python, "python", RANGE|EXTRA|NEEDARG),
321 ! EXCMD(CMD_pyfile, "pyfile", RANGE|FILE1|NEEDARG),
322 EXCMD(CMD_quit, "quit", BANG|TRLBAR),
323 EXCMD(CMD_qall, "qall", BANG|TRLBAR),
324 EXCMD(CMD_read, "read", BANG|RANGE|NAMEDF|TRLBAR|ZEROR),
326 EXCMD(CMD_ptselect, "ptselect", BANG|TRLBAR|WORD1),
327 EXCMD(CMD_put, "put", RANGE|BANG|REGSTR|TRLBAR|ZEROR),
328 EXCMD(CMD_pwd, "pwd", TRLBAR),
329 ! EXCMD(CMD_python, "python", RANGE|EXTRA|NEEDARG|SBOXOK),
330 ! EXCMD(CMD_pyfile, "pyfile", RANGE|FILE1|NEEDARG|SBOXOK),
331 EXCMD(CMD_quit, "quit", BANG|TRLBAR),
332 EXCMD(CMD_qall, "qall", BANG|TRLBAR),
333 EXCMD(CMD_read, "read", BANG|RANGE|NAMEDF|TRLBAR|ZEROR),
336 EXCMD(CMD_registers,"registers", EXTRA|NOTRLCOM|TRLBAR),
337 EXCMD(CMD_resize, "resize", TRLBAR|WORD1),
338 EXCMD(CMD_retab, "retab", TRLBAR|RANGE|DFLALL|BANG|WORD1),
339 ! EXCMD(CMD_return, "return", EXTRA|NOTRLCOM),
340 EXCMD(CMD_rewind, "rewind", EXTRA|BANG|EDITCMD|TRLBAR),
341 EXCMD(CMD_right, "right", TRLBAR|RANGE|EXTRA),
342 EXCMD(CMD_rviminfo, "rviminfo", BANG|FILE1|TRLBAR),
344 EXCMD(CMD_registers,"registers", EXTRA|NOTRLCOM|TRLBAR),
345 EXCMD(CMD_resize, "resize", TRLBAR|WORD1),
346 EXCMD(CMD_retab, "retab", TRLBAR|RANGE|DFLALL|BANG|WORD1),
347 ! EXCMD(CMD_return, "return", EXTRA|NOTRLCOM|SBOXOK),
348 EXCMD(CMD_rewind, "rewind", EXTRA|BANG|EDITCMD|TRLBAR),
349 EXCMD(CMD_right, "right", TRLBAR|RANGE|EXTRA),
350 EXCMD(CMD_rviminfo, "rviminfo", BANG|FILE1|TRLBAR),
353 EXCMD(CMD_snext, "snext", RANGE|NOTADR|BANG|NAMEDFS|EDITCMD|TRLBAR),
354 EXCMD(CMD_sniff, "sniff", EXTRA|TRLBAR),
355 EXCMD(CMD_snomagic, "snomagic", RANGE|EXTRA),
356 ! EXCMD(CMD_source, "source", BANG|NAMEDF|TRLBAR),
357 EXCMD(CMD_split, "split", BANG|FILE1|RANGE|NOTADR|EDITCMD|TRLBAR),
358 EXCMD(CMD_sprevious,"sprevious", EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|TRLBAR),
359 EXCMD(CMD_srewind, "srewind", EXTRA|BANG|EDITCMD|TRLBAR),
361 EXCMD(CMD_snext, "snext", RANGE|NOTADR|BANG|NAMEDFS|EDITCMD|TRLBAR),
362 EXCMD(CMD_sniff, "sniff", EXTRA|TRLBAR),
363 EXCMD(CMD_snomagic, "snomagic", RANGE|EXTRA),
364 ! EXCMD(CMD_source, "source", BANG|NAMEDF|TRLBAR|SBOXOK),
365 EXCMD(CMD_split, "split", BANG|FILE1|RANGE|NOTADR|EDITCMD|TRLBAR),
366 EXCMD(CMD_sprevious,"sprevious", EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|TRLBAR),
367 EXCMD(CMD_srewind, "srewind", EXTRA|BANG|EDITCMD|TRLBAR),
370 EXCMD(CMD_tNext, "tNext", RANGE|NOTADR|BANG|TRLBAR|ZEROR),
371 EXCMD(CMD_tag, "tag", RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR),
372 EXCMD(CMD_tags, "tags", TRLBAR),
373 ! EXCMD(CMD_tcl, "tcl", RANGE|EXTRA|NEEDARG),
374 ! EXCMD(CMD_tcldo, "tcldo", RANGE|DFLALL|EXTRA|NEEDARG),
375 ! EXCMD(CMD_tclfile, "tclfile", RANGE|FILE1|NEEDARG),
376 EXCMD(CMD_tearoff, "tearoff", NEEDARG|EXTRA|TRLBAR|NOTRLCOM),
377 EXCMD(CMD_tjump, "tjump", BANG|TRLBAR|WORD1),
378 EXCMD(CMD_tlast, "tlast", BANG|TRLBAR),
380 EXCMD(CMD_tNext, "tNext", RANGE|NOTADR|BANG|TRLBAR|ZEROR),
381 EXCMD(CMD_tag, "tag", RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR),
382 EXCMD(CMD_tags, "tags", TRLBAR),
383 ! EXCMD(CMD_tcl, "tcl", RANGE|EXTRA|NEEDARG|SBOXOK),
384 ! EXCMD(CMD_tcldo, "tcldo", RANGE|DFLALL|EXTRA|NEEDARG|SBOXOK),
385 ! EXCMD(CMD_tclfile, "tclfile", RANGE|FILE1|NEEDARG|SBOXOK),
386 EXCMD(CMD_tearoff, "tearoff", NEEDARG|EXTRA|TRLBAR|NOTRLCOM),
387 EXCMD(CMD_tjump, "tjump", BANG|TRLBAR|WORD1),
388 EXCMD(CMD_tlast, "tlast", BANG|TRLBAR),
391 EXCMD(CMD_undo, "undo", TRLBAR),
392 EXCMD(CMD_unabbreviate,"unabbreviate",EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
393 EXCMD(CMD_unhide, "unhide", RANGE|NOTADR|COUNT|TRLBAR),
394 ! EXCMD(CMD_unlet, "unlet", BANG|EXTRA|NEEDARG|TRLBAR),
395 EXCMD(CMD_unmap, "unmap", BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
396 EXCMD(CMD_unmenu, "unmenu", BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
397 EXCMD(CMD_update, "update", RANGE|BANG|FILE1|DFLALL|TRLBAR),
399 EXCMD(CMD_undo, "undo", TRLBAR),
400 EXCMD(CMD_unabbreviate,"unabbreviate",EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
401 EXCMD(CMD_unhide, "unhide", RANGE|NOTADR|COUNT|TRLBAR),
402 ! EXCMD(CMD_unlet, "unlet", BANG|EXTRA|NEEDARG|TRLBAR|SBOXOK),
403 EXCMD(CMD_unmap, "unmap", BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
404 EXCMD(CMD_unmenu, "unmenu", BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV),
405 EXCMD(CMD_update, "update", RANGE|BANG|FILE1|DFLALL|TRLBAR),
408 EXCMD(CMD_write, "write", RANGE|BANG|FILE1|DFLALL|TRLBAR),
409 EXCMD(CMD_wNext, "wNext", RANGE|NOTADR|BANG|FILE1|TRLBAR),
410 EXCMD(CMD_wall, "wall", BANG|TRLBAR),
411 ! EXCMD(CMD_while, "while", EXTRA|NOTRLCOM),
412 EXCMD(CMD_winsize, "winsize", EXTRA|NEEDARG|TRLBAR),
413 EXCMD(CMD_winpos, "winpos", EXTRA|TRLBAR),
414 EXCMD(CMD_wnext, "wnext", RANGE|NOTADR|BANG|FILE1|TRLBAR),
416 EXCMD(CMD_write, "write", RANGE|BANG|FILE1|DFLALL|TRLBAR),
417 EXCMD(CMD_wNext, "wNext", RANGE|NOTADR|BANG|FILE1|TRLBAR),
418 EXCMD(CMD_wall, "wall", BANG|TRLBAR),
419 ! EXCMD(CMD_while, "while", EXTRA|NOTRLCOM|SBOXOK),
420 EXCMD(CMD_winsize, "winsize", EXTRA|NEEDARG|TRLBAR),
421 EXCMD(CMD_winpos, "winpos", EXTRA|TRLBAR),
422 EXCMD(CMD_wnext, "wnext", RANGE|NOTADR|BANG|FILE1|TRLBAR),
423 *** ../vim-5.7.23/src/ex_docmd.c Sun Oct 22 16:43:53 2000
424 --- src/ex_docmd.c Mon Jan 29 20:32:24 2001
429 ea.argt = cmdnames[(int)ea.cmdidx].cmd_argt;
431 + #ifdef HAVE_SANDBOX
432 + if (sandbox != 0 && !(ea.argt & SBOXOK))
434 + /* Command not allowed in sandbox. */
435 + errormsg = e_sandbox;
440 if (!(ea.argt & RANGE) && ea.addr_count) /* no range allowed */
442 errormsg = e_norange;
443 *** ../vim-5.7.23/src/globals.h Tue Jun 20 21:28:04 2000
444 --- src/globals.h Mon Jan 29 20:32:44 2001
448 * allowed, e.g. when sourcing .exrc or .vimrc
449 * in current directory */
451 + #if defined(STATUSLINE) && defined(WANT_EVAL)
452 + # define HAVE_SANDBOX
453 + EXTERN int sandbox INIT(= 0);
454 + /* non-zero when evaluating an expression in a
455 + * "sandbox". Not allowed to change the
459 EXTERN int silent_mode INIT(= FALSE);
460 /* set to TRUE when "-s" commandline argument
467 EXTERN char_u e_readerrf[] INIT(="Error while reading errorfile");
469 + #ifdef HAVE_SANDBOX
470 + EXTERN char_u e_sandbox[] INIT(="Not allowed in sandbox");
472 EXTERN char_u e_scroll[] INIT(="Invalid scroll size");
473 EXTERN char_u e_tagformat[] INIT(="Format error in tags file \"%s\"");
474 *** ../vim-5.7.23/src/option.c Wed Jun 7 12:56:08 2000
475 --- src/option.c Mon Jan 29 20:17:58 2001
478 * in secure mode, setting of the secure option is not
481 ! if (secure && (int *)varp == &p_secure)
482 return (char_u *)"not allowed here";
486 * in secure mode, setting of the secure option is not
490 ! #ifdef HAVE_SANDBOX
493 ! ) && (int *)varp == &p_secure)
494 return (char_u *)"not allowed here";
497 *** ../vim-5.7.23/src/screen.c Mon Jan 8 11:50:35 2001
498 --- src/screen.c Mon Jan 29 19:56:10 2001
502 curbuf = wp->w_buffer;
504 ! str = eval_to_string(p, &t);
505 if (str != NULL && *str != 0)
510 curbuf = wp->w_buffer;
512 ! str = eval_to_string_safe(p, &t);
513 if (str != NULL && *str != 0)
516 *** ../vim-5.7.23/src/undo.c Sun Oct 31 16:18:20 1999
517 --- src/undo.c Mon Jan 29 20:34:03 2001
524 + #ifdef HAVE_SANDBOX
526 + * In the sandbox it's not allowed to change the text. Letting the
527 + * undo fail is a crude way to make all change commands fail.
537 * if curbuf->b_u_synced == TRUE make a new header
545 + #ifdef HAVE_SANDBOX
546 + /* In the sandbox it's not allowed to change the text. */
557 *** ../vim-5.7.23/src/version.c Thu Jan 18 14:01:55 2001
558 --- src/version.c Mon Jan 29 20:50:45 2001
562 { /* Add new patch number below this line */
568 hundred-and-one symptoms of being an internet addict:
569 70. ISDN lines are added to your house on a hourly basis
571 /// Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net \\\
572 ((( Creator of Vim - http://www.vim.org -- ftp://ftp.vim.org/pub/vim )))
573 \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///