Merge pull request #17174 from zeertzjq/vim-8.2.3153

vim-patch:8.2.3153: URLs with a dash in the scheme are not recognized
This commit is contained in:
bfredl 2022-01-27 08:32:02 +01:00 committed by GitHub
commit 47b50d5a1c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 68 additions and 3 deletions

View File

@ -1747,14 +1747,32 @@ int path_is_url(const char *p)
return 0;
}
/// Check if "fname" starts with "name://". Return URL_SLASH if it does.
/// Check if "fname" starts with "name://" or "name:\\".
///
/// @param fname is the filename to test
/// @return URL_BACKSLASH for "name:\\", zero otherwise.
/// @return URL_SLASH for "name://", URL_BACKSLASH for "name:\\", zero otherwise.
int path_with_url(const char *fname)
{
const char *p;
for (p = fname; isalpha(*p); p++) {}
// We accept alphabetic characters and a dash in scheme part.
// RFC 3986 allows for more, but it increases the risk of matching
// non-URL text.
// first character must be alpha
if (!isalpha(*fname)) {
return 0;
}
// check body: alpha or dash
for (p = fname; (isalpha(*p) || (*p == '-')); p++) {}
// check last char is not a dash
if (p[-1] == '-') {
return 0;
}
// "://" or ":\\" must follow
return path_is_url(p);
}

View File

@ -1,5 +1,7 @@
" Tests for Vim buffer
source check.vim
func Test_buffer_error()
new foo1
new foo2
@ -30,4 +32,33 @@ func Test_balt()
call assert_equal('OtherBuffer', bufname())
endfunc
" Test for buffer match URL(scheme) check
" scheme is alpha and inner hyphen only.
func Test_buffer_scheme()
CheckMSWindows
set noshellslash
%bwipe!
let bufnames = [
\ #{id: 'b0', name: 'test://xyz/foo/b0' , match: 1},
\ #{id: 'b1', name: 'test+abc://xyz/foo/b1', match: 0},
\ #{id: 'b2', name: 'test_abc://xyz/foo/b2', match: 0},
\ #{id: 'b3', name: 'test-abc://xyz/foo/b3', match: 1},
\ #{id: 'b4', name: '-test://xyz/foo/b4' , match: 0},
\ #{id: 'b5', name: 'test-://xyz/foo/b5' , match: 0},
\]
for buf in bufnames
new `=buf.name`
if buf.match
call assert_equal(buf.name, getbufinfo(buf.id)[0].name)
else
" slashes will have become backslashes
call assert_notequal(buf.name, getbufinfo(buf.id)[0].name)
endif
bwipe
endfor
set shellslash&
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -626,4 +626,20 @@ describe('path.c', function()
eq(false, path_with_extension('/some/path/file', 'lua'))
end)
end)
describe('path_with_url', function()
itp('scheme is alpha and inner hyphen only', function()
local function path_with_url(fname)
return cimp.path_with_url(to_cstr(fname))
end
eq(1, path_with_url([[test://xyz/foo/b0]]))
eq(2, path_with_url([[test:\\xyz\foo\b0]]))
eq(0, path_with_url([[test+abc://xyz/foo/b1]]))
eq(0, path_with_url([[test_abc://xyz/foo/b2]]))
eq(1, path_with_url([[test-abc://xyz/foo/b3]]))
eq(2, path_with_url([[test-abc:\\xyz\foo\b3]]))
eq(0, path_with_url([[-test://xyz/foo/b4]]))
eq(0, path_with_url([[test-://xyz/foo/b5]]))
end)
end)
end)