Mercurial > vim
view runtime/indent/cmake.vim @ 33664:06b59278bfcf v9.0.2070
patch 9.0.2070: [security] disallow setting env in restricted mode
Commit: https://github.com/vim/vim/commit/6b89dd6a7257a1e2e9c7ea070b407bc4674a5118
Author: Christian Brabandt <cb@256bit.org>
Date: Thu Oct 26 22:14:17 2023 +0200
patch 9.0.2070: [security] disallow setting env in restricted mode
Problem: [security] disallow setting env in restricted mode
Solution: Setting environment variables in restricted mode could
potentially be used to execute shell commands. Disallow this.
restricted mode: disable allow setting of environment variables
Setting environment variables in restricted mode, may have some unwanted
consequences. So, for example by setting $GCONV_PATH in restricted mode
and then calling the iconv() function, one may be able to execute some
unwanted payload, because the `iconv_open()` function internally uses
the `$GCONV_PATH` variable to find its conversion data.
So let's disable setting environment variables, even so this is no
complete protection, since we are not clearing the existing environment.
I tried a few ways but wasn't successful :(
One could also argue to disable the iconv() function completely in
restricted mode, but who knows what other API functions can be
influenced by setting some other unrelated environment variables.
So let's leave it as it is currently.
closes: #13394
See: https://huntr.com/bounties/b0a2eda1-459c-4e36-98e6-0cc7d7faccfe/
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 26 Oct 2023 22:30:03 +0200 |
parents | 6dd88e45d47d |
children | c82f521e9a43 |
line wrap: on
line source
" Vim indent file " Language: CMake (ft=cmake) " Author: Andy Cedilnik <andy.cedilnik@kitware.com> " Maintainer: Dimitri Merejkowsky <d.merej@gmail.com> " Former Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com> " Last Change: 2022 Apr 06 " " Licence: The CMake license applies to this file. See " https://cmake.org/licensing " This implies that distribution with Vim is allowed if exists("b:did_indent") finish endif let b:did_indent = 1 setlocal indentexpr=CMakeGetIndent(v:lnum) setlocal indentkeys+==ENDIF(,ENDFOREACH(,ENDMACRO(,ELSE(,ELSEIF(,ENDWHILE( let b:undo_indent = "setl inde< indk<" " Only define the function once. if exists("*CMakeGetIndent") finish endif let s:keepcpo= &cpo set cpo&vim fun! CMakeGetIndent(lnum) let this_line = getline(a:lnum) " Find a non-blank line above the current line. let lnum = a:lnum let lnum = prevnonblank(lnum - 1) let previous_line = getline(lnum) " Hit the start of the file, use zero indent. if lnum == 0 return 0 endif let ind = indent(lnum) let or = '\|' " Regular expressions used by line indentation function. let cmake_regex_comment = '#.*' let cmake_regex_identifier = '[A-Za-z][A-Za-z0-9_]*' let cmake_regex_quoted = '"\([^"\\]\|\\.\)*"' let cmake_regex_arguments = '\(' . cmake_regex_quoted . \ or . '\$(' . cmake_regex_identifier . ')' . \ or . '[^()\\#"]' . or . '\\.' . '\)*' let cmake_indent_comment_line = '^\s*' . cmake_regex_comment let cmake_indent_blank_regex = '^\s*$' let cmake_indent_open_regex = '^\s*' . cmake_regex_identifier . \ '\s*(' . cmake_regex_arguments . \ '\(' . cmake_regex_comment . '\)\?$' let cmake_indent_close_regex = '^' . cmake_regex_arguments . \ ')\s*' . \ '\(' . cmake_regex_comment . '\)\?$' let cmake_indent_begin_regex = '^\s*\(IF\|MACRO\|FOREACH\|ELSE\|ELSEIF\|WHILE\|FUNCTION\)\s*(' let cmake_indent_end_regex = '^\s*\(ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\|ELSEIF\|ENDWHILE\|ENDFUNCTION\)\s*(' " Add if previous_line =~? cmake_indent_comment_line " Handle comments let ind = ind else if previous_line =~? cmake_indent_begin_regex let ind = ind + shiftwidth() endif if previous_line =~? cmake_indent_open_regex let ind = ind + shiftwidth() endif endif " Subtract if this_line =~? cmake_indent_end_regex let ind = ind - shiftwidth() endif if previous_line =~? cmake_indent_close_regex let ind = ind - shiftwidth() endif return ind endfun let &cpo = s:keepcpo unlet s:keepcpo