mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.3153: URLs with a dash in the scheme are not recognized
Problem: URLs with a dash in the scheme are not recognized.
Solution: Allow for a scheme with a dash, but not at the start or end.
(Tsuyoshi CHO, closes vim/vim#8299)
7b7a118e74
This commit is contained in:
parent
7e2ce35e3b
commit
9bb9f17592
@ -1743,14 +1743,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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user