forked from aniani/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 #8299)
This commit is contained in:
committed by
Bram Moolenaar
parent
11005b078d
commit
7b7a118e74
21
src/misc1.c
21
src/misc1.c
@@ -2600,8 +2600,8 @@ path_is_url(char_u *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if "fname" starts with "name://". Return URL_SLASH if it does.
|
* Check if "fname" starts with "name://" or "name:\\".
|
||||||
* Return URL_BACKSLASH for "name:\\".
|
* Return URL_SLASH for "name://", URL_BACKSLASH for "name:\\".
|
||||||
* Return zero otherwise.
|
* Return zero otherwise.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
@@ -2609,7 +2609,22 @@ path_with_url(char_u *fname)
|
|||||||
{
|
{
|
||||||
char_u *p;
|
char_u *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);
|
return path_is_url(p);
|
||||||
}
|
}
|
||||||
|
@@ -381,6 +381,35 @@ func Test_balt()
|
|||||||
call assert_equal('OtherBuffer', bufname())
|
call assert_equal('OtherBuffer', bufname())
|
||||||
endfunc
|
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
|
||||||
|
|
||||||
" Test for the 'maxmem' and 'maxmemtot' options
|
" Test for the 'maxmem' and 'maxmemtot' options
|
||||||
func Test_buffer_maxmem()
|
func Test_buffer_maxmem()
|
||||||
" use 1KB per buffer and 2KB for all the buffers
|
" use 1KB per buffer and 2KB for all the buffers
|
||||||
|
@@ -755,6 +755,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
3153,
|
||||||
/**/
|
/**/
|
||||||
3152,
|
3152,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user