Mercurial > vim
view runtime/ftplugin/abaqus.vim @ 33879:d418c82f02a4 v9.0.2149
patch 9.0.2149: [security]: use-after-free in exec_instructions()
Commit: https://github.com/vim/vim/commit/5dd41d4b6370b7b7d09d691f9252b3899c66102a
Author: Christian Brabandt <cb@256bit.org>
Date: Mon Dec 4 22:52:23 2023 +0100
patch 9.0.2149: [security]: use-after-free in exec_instructions()
Problem: [security]: use-after-free in exec_instructions()
Solution: get tv pointer again
[security]: use-after-free in exec_instructions()
exec_instructions may access freed memory, if the GA_GROWS_FAILS()
re-allocates memory. When this happens, the typval tv may still point to
now already freed memory. So let's get that pointer again and compare it
with tv. If those two pointers differ, tv is now invalid and we have to
refresh the tv pointer.
closes: #13621
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 10 Dec 2023 15:16:17 +0100 |
parents | 3295247d97a5 |
children | 8ae680be2a51 |
line wrap: on
line source
" Vim filetype plugin file " Language: Abaqus finite element input file (www.abaqus.com) " Maintainer: Carl Osterwisch <costerwi@gmail.com> " Last Change: 2022 Oct 08 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") | finish | endif " Don't load another plugin for this buffer let b:did_ftplugin = 1 " Save the compatibility options and temporarily switch to vim defaults let s:cpo_save = &cpoptions set cpoptions&vim " Set the format of the include file specification for Abaqus " Used in :check gf ^wf [i and other commands setlocal include=\\<\\cINPUT\\s*= " Remove characters up to the first = when evaluating filenames setlocal includeexpr=substitute(v:fname,'.\\{-}=','','') " Remove comma from valid filename characters since it is used to " separate keyword parameters setlocal isfname-=, " Define format of comment lines (see 'formatoptions' for uses) setlocal comments=:** setlocal commentstring=**%s " Definitions start with a * and assign a NAME, NSET, or ELSET " Used in [d ^wd and other commands setlocal define=^\\*\\a.*\\c\\(NAME\\\|NSET\\\|ELSET\\)\\s*= " Abaqus keywords and identifiers may include a - character setlocal iskeyword+=- let b:undo_ftplugin = "setlocal include< includeexpr< isfname<" \ . " comments< commentstring< define< iskeyword<" if has("folding") " Fold all lines that do not begin with * setlocal foldexpr=getline(v:lnum)[0]!=\"\*\" setlocal foldmethod=expr let b:undo_ftplugin .= " foldexpr< foldmethod<" endif " Set the file browse filter (currently only supported under Win32 gui) if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "Abaqus Input Files (*.inp *.inc)\t*.inp;*.inc\n" . \ "Abaqus Results (*.dat)\t*.dat\n" . \ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" . \ "All Files (*.*)\t*.*\n" let b:undo_ftplugin .= "|unlet! b:browsefilter" endif " Define patterns for the matchit plugin if exists("loaded_matchit") && !exists("b:match_words") let b:match_ignorecase = 1 let b:match_words = \ '\*part:\*end\s*part,' . \ '\*assembly:\*end\s*assembly,' . \ '\*instance:\*end\s*instance,' . \ '\*step:\*end\s*step' let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words" endif if !exists("no_plugin_maps") && !exists("no_abaqus_maps") " Map [[ and ]] keys to move [count] keywords backward or forward nnoremap <silent><buffer> ]] :call <SID>Abaqus_NextKeyword(1)<CR> nnoremap <silent><buffer> [[ :call <SID>Abaqus_NextKeyword(-1)<CR> function! <SID>Abaqus_NextKeyword(direction) .mark ' if a:direction < 0 let flags = 'b' else let flags = '' endif let l:count = abs(a:direction) * v:count1 while l:count > 0 && search("^\\*\\a", flags) let l:count -= 1 endwhile endfunction " Map \\ to toggle commenting of the current line or range noremap <silent><buffer> <LocalLeader><LocalLeader> \ :call <SID>Abaqus_ToggleComment()<CR>j function! <SID>Abaqus_ToggleComment() range if strpart(getline(a:firstline), 0, 2) == "**" " Un-comment all lines in range silent execute a:firstline . ',' . a:lastline . 's/^\*\*//' else " Comment all lines in range silent execute a:firstline . ',' . a:lastline . 's/^/**/' endif endfunction " Map \s to swap first two comma separated fields noremap <silent><buffer> <LocalLeader>s :call <SID>Abaqus_Swap()<CR> function! <SID>Abaqus_Swap() range silent execute a:firstline . ',' . a:lastline . 's/\([^*,]*\),\([^,]*\)/\2,\1/' endfunction let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]" \ . "|unmap <buffer> <LocalLeader><LocalLeader>" \ . "|unmap <buffer> <LocalLeader>s" endif " Undo must be done in nocompatible mode for <LocalLeader>. let b:undo_ftplugin = "let b:cpo_save = &cpoptions|" \ . "set cpoptions&vim|" \ . b:undo_ftplugin \ . "|let &cpoptions = b:cpo_save" \ . "|unlet b:cpo_save" " Restore saved compatibility options let &cpoptions = s:cpo_save unlet s:cpo_save