mirror of
https://github.com/neovim/neovim.git
synced 2026-07-14 21:30:34 +00:00
fix(cmd): ++p, ++edit should match "word" boundary #39146
Problem: `:write ++patate foo` doesn't error out, instead it turns on
mkdir_p and uses "atate foo" as the filename. Same with ++edit.
The parser just does strncmp without checking what comes after.
Solution: require the next char after the option name to not be a
letter
(cherry picked from commit 44770bb924)
This commit is contained in:
committed by
github-actions[bot]
parent
15d824e5d6
commit
ba3de79ccb
@@ -4366,14 +4366,14 @@ int getargopt(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ":read ++edit file"
|
// ":read ++edit file"
|
||||||
if (strncmp(arg, "edit", 4) == 0) {
|
if (strncmp(arg, "edit", 4) == 0 && !ASCII_ISALPHA(arg[4])) {
|
||||||
eap->read_edit = true;
|
eap->read_edit = true;
|
||||||
eap->arg = skipwhite(arg + 4);
|
eap->arg = skipwhite(arg + 4);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ":write ++p foo/bar/file
|
// ":write ++p foo/bar/file
|
||||||
if (strncmp(arg, "p", 1) == 0) {
|
if (arg[0] == 'p' && !ASCII_ISALPHA(arg[1])) {
|
||||||
eap->mkdir_p = true;
|
eap->mkdir_p = true;
|
||||||
eap->arg = skipwhite(arg + 1);
|
eap->arg = skipwhite(arg + 1);
|
||||||
return OK;
|
return OK;
|
||||||
|
|||||||
@@ -124,6 +124,10 @@ describe(':write', function()
|
|||||||
eq(1, eval("filereadable('Xtest_write/write2/p_opt.txt')"))
|
eq(1, eval("filereadable('Xtest_write/write2/p_opt.txt')"))
|
||||||
eq(1, eval("filereadable('Xtest_write/write2/p_opt2.txt')"))
|
eq(1, eval("filereadable('Xtest_write/write2/p_opt2.txt')"))
|
||||||
eq(0, eval("filereadable('Xtest_write/write3/p_opt3.txt')"))
|
eq(0, eval("filereadable('Xtest_write/write3/p_opt3.txt')"))
|
||||||
|
t.matches(
|
||||||
|
'E474: Invalid argument',
|
||||||
|
pcall_err(command, 'read ++edits Xtest_write/write/p_opt.txt')
|
||||||
|
)
|
||||||
|
|
||||||
eq('Vim(write):E32: No file name', pcall_err(command, 'write ++p Xotherdir/'))
|
eq('Vim(write):E32: No file name', pcall_err(command, 'write ++p Xotherdir/'))
|
||||||
if not is_os('win') then
|
if not is_os('win') then
|
||||||
@@ -136,6 +140,11 @@ describe(':write', function()
|
|||||||
pcall_err(command, 'write ++p ./')
|
pcall_err(command, 'write ++p ./')
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
t.matches(
|
||||||
|
'E474: Invalid argument',
|
||||||
|
pcall_err(command, 'write ++patate Xtest_write/garbage.txt')
|
||||||
|
)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('errors out correctly', function()
|
it('errors out correctly', function()
|
||||||
|
|||||||
Reference in New Issue
Block a user