Mercurial > vim
changeset 26960:043a15b37bf1 v8.2.4009
patch 8.2.4009: reading one byte beyond the end of the line
Commit: https://github.com/vim/vim/commit/d3a117814d6acbf0dca3eff1a7626843b9b3734a
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jan 5 16:50:40 2022 +0000
patch 8.2.4009: reading one byte beyond the end of the line
Problem: Reading one byte beyond the end of the line.
Solution: Check for NUL byte first.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 05 Jan 2022 18:00:05 +0100 |
parents | 11d386c0c8f4 |
children | 33c0467b3c52 |
files | src/ex_docmd.c src/testdir/test_vim9_func.vim src/version.c src/vim9compile.c |
diffstat | 4 files changed, 17 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3632,7 +3632,8 @@ find_ex_command( } // Check for "++nr" and "--nr". - if (p == eap->cmd && p[0] == p[1] && (*p == '+' || *p == '-')) + if (p == eap->cmd && p[0] != NUL && p[0] == p[1] + && (*p == '+' || *p == '-')) { eap->cmdidx = *p == '+' ? CMD_increment : CMD_decrement; return eap->cmd + 2;
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -3537,6 +3537,17 @@ def Test_numbered_function_reference() unlet g:mydict enddef +def Test_go_beyond_end_of_cmd() + # this was reading the byte after the end of the line + var lines =<< trim END + def F() + cal + enddef + defcompile + END + CheckScriptFailure(lines, 'E476:') +enddef + if has('python3') def Test_python3_heredoc() py3 << trim EOF
--- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4009, +/**/ 4008, /**/ 4007,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -2781,7 +2781,8 @@ compile_def_function( cmd = ea.cmd; if ((*cmd != '$' || starts_with_colon) && (starts_with_colon || !(*cmd == '\'' - || (cmd[0] == cmd[1] && (*cmd == '+' || *cmd == '-'))))) + || (cmd[0] != NUL && cmd[0] == cmd[1] + && (*cmd == '+' || *cmd == '-'))))) { ea.cmd = skip_range(ea.cmd, TRUE, NULL); if (ea.cmd > cmd)