Mercurial > vim
view runtime/syntax/dosbatch.vim @ 34074:1629cc65d78d v9.1.0006
patch 9.1.0006: is*() and to*() function may be unsafe
Commit: https://github.com/vim/vim/commit/184f71cc6868a240dc872ed2852542bbc1d43e28
Author: Keith Thompson <Keith.S.Thompson@gmail.com>
Date: Thu Jan 4 21:19:04 2024 +0100
patch 9.1.0006: is*() and to*() function may be unsafe
Problem: is*() and to*() function may be unsafe
Solution: Add SAFE_* macros and start using those instead
(Keith Thompson)
Use SAFE_() macros for is*() and to*() functions
The standard is*() and to*() functions declared in <ctype.h> have
undefined behavior for negative arguments other than EOF. If plain char
is signed, passing an unchecked value from argv for from user input
to one of these functions has undefined behavior.
Solution: Add SAFE_*() macros that cast the argument to unsigned char.
Most implementations behave sanely for negative arguments, and most
character values in practice are non-negative, but it's still best
to avoid undefined behavior.
The change from #13347 has been omitted, as this has already been
separately fixed in commit ac709e2fc0db6d31abb7da96f743c40956b60c3a
(v9.0.2054)
fixes: #13332
closes: #13347
Signed-off-by: Keith Thompson <Keith.S.Thompson@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 04 Jan 2024 21:30:04 +0100 |
parents | a9b5ffbc0428 |
children | 9c674ef89d9d |
line wrap: on
line source
" Vim syntax file " Language: MS-DOS/Windows batch file (with NT command extensions) " Maintainer: Mike Williams <mrmrdubya@gmail.com> " Filenames: *.bat " Last Change: 12th February 2023 " " Options Flags: " dosbatch_cmdextversion - 1 = Windows NT, 2 = Windows 2000 [default] " dosbatch_colons_comment - any value to treat :: as comment line " " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif " Set default highlighting to Win2k if !exists("dosbatch_cmdextversion") let dosbatch_cmdextversion = 2 endif " DOS bat files are case insensitive but case preserving! syn case ignore syn keyword dosbatchTodo contained TODO " Dosbat keywords syn keyword dosbatchStatement goto call exit syn keyword dosbatchConditional if else syn keyword dosbatchRepeat for " Some operators - first lot are case sensitive! syn case match syn keyword dosbatchOperator EQU NEQ LSS LEQ GTR GEQ syn case ignore syn match dosbatchOperator "\s[-+\*/%!~]\s" syn match dosbatchOperator "=" syn match dosbatchOperator "[-+\*/%]=" syn match dosbatchOperator "\s\(&\||\|^\|<<\|>>\)=\=\s" syn match dosbatchIfOperator "if\s\+\(\(not\)\=\s\+\)\=\(exist\|defined\|errorlevel\|cmdextversion\)\="lc=2 " String - using "'s is a convenience rather than a requirement outside of FOR syn match dosbatchString "\"[^"]*\"" contains=dosbatchVariable,dosBatchArgument,dosbatchSpecialChar,@dosbatchNumber,@Spell syn match dosbatchString "\<echo\([^)>|]\|\^\@<=[)>|]\)*"lc=4 contains=dosbatchVariable,dosbatchArgument,dosbatchSpecialChar,@dosbatchNumber,@Spell syn match dosbatchEchoOperator "\<echo\s\+\(on\|off\)\s*$"lc=4 " For embedded commands syn match dosbatchCmd "(\s*'[^']*'"lc=1 contains=dosbatchString,dosbatchVariable,dosBatchArgument,@dosbatchNumber,dosbatchImplicit,dosbatchStatement,dosbatchConditional,dosbatchRepeat,dosbatchOperator " Numbers - surround with ws to not include in dir and filenames syn match dosbatchInteger "[[:space:]=(/:,!~-]\d\+"lc=1 syn match dosbatchHex "[[:space:]=(/:,!~-]0x\x\+"lc=1 syn match dosbatchBinary "[[:space:]=(/:,!~-]0b[01]\+"lc=1 syn match dosbatchOctal "[[:space:]=(/:,!~-]0\o\+"lc=1 syn cluster dosbatchNumber contains=dosbatchInteger,dosbatchHex,dosbatchBinary,dosbatchOctal " Command line switches syn match dosbatchSwitch "/\(\a\+\|?\)" " Various special escaped char formats syn match dosbatchSpecialChar "\^[&|()<>^]" syn match dosbatchSpecialChar "\$[a-hl-npqstv_$+]" syn match dosbatchSpecialChar "%%" " Environment variables syn match dosbatchIdentifier contained "\s\h\w*\>" syn match dosbatchVariable "%\h\w*%" syn match dosbatchVariable "%\h\w*:\*\=[^=]*=[^%]*%" syn match dosbatchVariable "%\h\w*:\~[-]\=\d\+\(,[-]\=\d\+\)\=%" contains=dosbatchInteger syn match dosbatchVariable "!\h\w*!" syn match dosbatchVariable "!\h\w*:\*\=[^=]*=[^!]*!" syn match dosbatchVariable "!\h\w*:\~[-]\=\d\+\(,[-]\=\d\+\)\=!" contains=dosbatchInteger syn match dosbatchSet "\s\h\w*[+-]\==\{-1}" contains=dosbatchIdentifier,dosbatchOperator " Args to bat files and for loops, etc syn match dosbatchArgument "%\(\d\|\*\)" syn match dosbatchArgument "%[a-z]\>" if dosbatch_cmdextversion == 1 syn match dosbatchArgument "%\~[fdpnxs]\+\(\($PATH:\)\=[a-z]\|\d\)\>" else syn match dosbatchArgument "%\~[fdpnxsatz]\+\(\($PATH:\)\=[a-z]\|\d\)\>" endif " Line labels syn match dosbatchLabel "^\s*:\s*\h\w*\>" syn match dosbatchLabel "\<\(goto\|call\)\s\+:\h\w*\>"lc=4 syn match dosbatchLabel "\<goto\s\+\h\w*\>"lc=4 syn match dosbatchLabel ":\h\w*\>" " Comments - usual rem but also two colons as first non-space is an idiom syn match dosbatchComment "^rem\($\|\s.*$\)"lc=3 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell syn match dosbatchComment "^@rem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell syn match dosbatchComment "\srem\($\|\s.*$\)"lc=4 contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell syn match dosbatchComment "\s@rem\($\|\s.*$\)"lc=5 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell if exists("dosbatch_colons_comment") syn match dosbatchComment "\s*:\s*:.*$" contains=dosbatchTodo,dosbatchSpecialChar,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell else syn match dosbatchError "\s*:\s*:.*$" endif " Comments in ()'s - still to handle spaces before rem syn match dosbatchComment "(rem\([^)]\|\^\@<=)\)*"lc=4 contains=dosbatchTodo,@dosbatchNumber,dosbatchVariable,dosbatchArgument,@Spell syn keyword dosbatchImplicit append assoc at attrib break cacls cd chcp chdir syn keyword dosbatchImplicit chkdsk chkntfs cls cmd color comp compact convert copy syn keyword dosbatchImplicit date del dir diskcomp diskcopy doskey echo endlocal syn keyword dosbatchImplicit erase fc find findstr format ftype syn keyword dosbatchImplicit graftabl help keyb label md mkdir mode more move syn keyword dosbatchImplicit path pause popd print prompt pushd rd recover rem syn keyword dosbatchImplicit ren rename replace restore rmdir set setlocal shift syn keyword dosbatchImplicit sort start subst time title tree type ver verify syn keyword dosbatchImplicit vol xcopy " Define the default highlighting. " Only when an item doesn't have highlighting yet hi def link dosbatchTodo Todo hi def link dosbatchError Error hi def link dosbatchStatement Statement hi def link dosbatchCommands dosbatchStatement hi def link dosbatchLabel Label hi def link dosbatchConditional Conditional hi def link dosbatchRepeat Repeat hi def link dosbatchOperator Operator hi def link dosbatchEchoOperator dosbatchOperator hi def link dosbatchIfOperator dosbatchOperator hi def link dosbatchArgument Identifier hi def link dosbatchIdentifier Identifier hi def link dosbatchVariable dosbatchIdentifier hi def link dosbatchSpecialChar SpecialChar hi def link dosbatchString String hi def link dosbatchNumber Number hi def link dosbatchInteger dosbatchNumber hi def link dosbatchHex dosbatchNumber hi def link dosbatchBinary dosbatchNumber hi def link dosbatchOctal dosbatchNumber hi def link dosbatchComment Comment hi def link dosbatchImplicit Function hi def link dosbatchSwitch Special hi def link dosbatchCmd PreProc let b:current_syntax = "dosbatch" " vim: ts=8