annotate runtime/ftplugin/mp.vim @ 33776:9503dc55b5ed v9.0.2108

patch 9.0.2108: [security]: overflow with count for :s command Commit: https://github.com/vim/vim/commit/ac63787734fda2e294e477af52b3bd601517fa78 Author: Christian Brabandt <cb@256bit.org> Date: Tue Nov 14 20:45:48 2023 +0100 patch 9.0.2108: [security]: overflow with count for :s command Problem: [security]: overflow with count for :s command Solution: Abort the :s command if the count is too large If the count after the :s command is larger than what fits into a (signed) long variable, abort with e_value_too_large. Adds a test with INT_MAX as count and verify it correctly fails. It seems the return value on Windows using mingw compiler wraps around, so the initial test using :s/./b/9999999999999999999999999990 doesn't fail there, since the count is wrapping around several times and finally is no longer larger than 2147483647. So let's just use 2147483647 in the test, which hopefully will always cause a failure Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 16 Nov 2023 22:15:10 +0100
parents 2acb87ee55fc
children 8ae680be2a51
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
1 vim9script
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
2
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
3 # Vim filetype plugin file
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
4 # Language: MetaPost
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
5 # Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
6 # Former Maintainers: Nikolai Weibull <now@bitwi.se>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
7 # Latest Revision: 2022 Aug 12
389
4fe8e1a7758e updated for version 7.0102
vimboss
parents: 7
diff changeset
8
4fe8e1a7758e updated for version 7.0102
vimboss
parents: 7
diff changeset
9 if exists("b:did_ftplugin")
4fe8e1a7758e updated for version 7.0102
vimboss
parents: 7
diff changeset
10 finish
4fe8e1a7758e updated for version 7.0102
vimboss
parents: 7
diff changeset
11 endif
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
12
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
13 b:did_ftplugin = 1
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
14 b:undo_ftplugin = "setl com< cms< fo< sua< inc< def< ofu<"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
16 setlocal comments=:%
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
17 setlocal commentstring=%\ %s
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
18 setlocal formatoptions+=cjroql2
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
19 setlocal formatoptions-=t
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
20 setlocal omnifunc=syntaxcomplete#Complete
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
21 setlocal suffixesadd=.mp,.mpiv,.mpvi,.mpxl
1698
f4f8014d516e updated for version 7.2c-000
vimboss
parents: 1217
diff changeset
22
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
23 &l:include = '\<\%(input\|loadmodule\)\>' # loadmodule is from MetaFun
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
24 &l:define = '\<\%(let\|newinternal\|interim\|def\|vardef\)\>\|\<\%(primary\|secondary\|tertiary\)def\>\s*[^ .]\+'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
25
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
26 g:omni_syntax_group_include_mp = 'mf\w\+,mp\w\+,metafun\w\+'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
27 g:omni_syntax_group_exclude_mp = 'mfTodoComment'
389
4fe8e1a7758e updated for version 7.0102
vimboss
parents: 7
diff changeset
28
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
29 var fignum: number
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
30
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
31 def FixBeginfigs()
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
32 fignum = 1
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
33 g/^\s*beginfig(\d*)\s*;\(\s*%.*\)\=$/s/^.\{-};/\='beginfig(' .. fignum .. ');'/ | ++fignum
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
34 enddef
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
35
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
36 command! -buffer -nargs=0 -bar FixBeginfigs FixBeginfigs()
389
4fe8e1a7758e updated for version 7.0102
vimboss
parents: 7
diff changeset
37
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
38 if exists("g:loaded_matchit") && !exists("b:match_words")
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
39 b:match_ignorecase = 0
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
40 b:match_skip = 'synIDattr(synID(line("."), col("."), 1), "name") =~# "^mf\\%(Comment\\|String\\|\\)$\\|^mpTeXinsert$"'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
41 b:match_words = '\<if\>:\<else\%[if]\>:\<fi\>,'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
42 .. '\<for\%(\|suffixes\|ever\)\>:\<exit\%(if\|unless\)\>:\<endfor\>,'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
43 .. '\<\%(\|var\|primary\|secondary\|tertiary\)def\>:\<enddef\>,'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
44 .. '\<begin\(\a\+\)\>:end\1,'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
45 .. '\<beginlogochar\>:\<endchar\>'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
46 b:undo_ftplugin ..= "| unlet! b:match_ignorecase b:match_words b:match_skip"
389
4fe8e1a7758e updated for version 7.0102
vimboss
parents: 7
diff changeset
47 endif
1698
f4f8014d516e updated for version 7.2c-000
vimboss
parents: 1217
diff changeset
48
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
49 if !get(g:, 'no_mp_maps', 0) && !get(g:, 'no_plugin_maps', 0)
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
50 const mp_regex = {
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
51 'beginsection': '^\s*\%(\%(\|var\|primary\|secondary\|tertiary\)def\|begin\%(fig\|char\|logochar\|glyph\|graph\)\)\>',
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
52 'endsection': '^\s*\%(enddef\|end\%(fig\|char\|glyph\|graph\)\)\>',
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
53 'beginblock': '^\s*\%(begingroup\|if\|for\%(\|suffixes\|ever\)\)\>',
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
54 'endblock': '^\s*\%(endgroup\|fi\|endfor\)\>'}
10244
876fbdd84e52 commit https://github.com/vim/vim/commit/2ec618c9feac4573b154510236ad8121c77d0eca
Christian Brabandt <cb@256bit.org>
parents: 1698
diff changeset
55
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
56 def MoveAround(count: number, what: string, flags: string)
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
57 search(mp_regex[what], flags .. 's') # 's' sets previous context mark
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
58 var i = 2
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
59 while i <= count
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
60 search(mp_regex[what], flags)
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
61 i += 1
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
62 endwhile
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
63 enddef
10244
876fbdd84e52 commit https://github.com/vim/vim/commit/2ec618c9feac4573b154510236ad8121c77d0eca
Christian Brabandt <cb@256bit.org>
parents: 1698
diff changeset
64
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
65 # Macros to move around
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
66 nnoremap <silent><buffer> [[ <scriptcmd>MoveAround(v:count1, "beginsection", "bW")<cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
67 vnoremap <silent><buffer> [[ <scriptcmd>MoveAround(v:count1, "beginsection", "bW")<cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
68 nnoremap <silent><buffer> ]] <scriptcmd>MoveAround(v:count1, "beginsection", "W") <cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
69 vnoremap <silent><buffer> ]] <scriptcmd>MoveAround(v:count1, "beginsection", "W") <cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
70 nnoremap <silent><buffer> [] <scriptcmd>MoveAround(v:count1, "endsection", "bW")<cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
71 vnoremap <silent><buffer> [] <scriptcmd>MoveAround(v:count1, "endsection", "bW")<cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
72 nnoremap <silent><buffer> ][ <scriptcmd>MoveAround(v:count1, "endsection", "W") <cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
73 vnoremap <silent><buffer> ][ <scriptcmd>MoveAround(v:count1, "endsection", "W") <cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
74 nnoremap <silent><buffer> [{ <scriptcmd>MoveAround(v:count1, "beginblock", "bW")<cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
75 vnoremap <silent><buffer> [{ <scriptcmd>MoveAround(v:count1, "beginblock", "bW")<cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
76 nnoremap <silent><buffer> ]} <scriptcmd>MoveAround(v:count1, "endblock", "W") <cr>
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
77 vnoremap <silent><buffer> ]} <scriptcmd>MoveAround(v:count1, "endblock", "W") <cr>
10244
876fbdd84e52 commit https://github.com/vim/vim/commit/2ec618c9feac4573b154510236ad8121c77d0eca
Christian Brabandt <cb@256bit.org>
parents: 1698
diff changeset
78
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
79 for mapping in ["[[", "]]", "[]", "][", "[{", "]}"]
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
80 b:undo_ftplugin ..= printf(" | silent! execute 'nunmap <buffer> %s'", mapping)
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
81 b:undo_ftplugin ..= printf(" | silent! execute 'vunmap <buffer> %s'", mapping)
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
82 endfor
10244
876fbdd84e52 commit https://github.com/vim/vim/commit/2ec618c9feac4573b154510236ad8121c77d0eca
Christian Brabandt <cb@256bit.org>
parents: 1698
diff changeset
83 endif
876fbdd84e52 commit https://github.com/vim/vim/commit/2ec618c9feac4573b154510236ad8121c77d0eca
Christian Brabandt <cb@256bit.org>
parents: 1698
diff changeset
84
29756
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
85 if (has('gui_win32') || has('gui_gtk')) && !exists('b:browsefilter')
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
86 b:browsefilter = "MetaPost Source Files (*.mp)\t*.mp\n"
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
87 .. "All Files (*.*)\t*.*\n"
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
88 b:undo_ftplugin ..= ' | unlet! b:browsefilter'
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
89 endif
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
90
2acb87ee55fc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 10261
diff changeset
91 # vim: sw=2 fdm=marker