1
0
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:
Tsuyoshi CHO
2021-07-11 21:51:17 +02:00
committed by Bram Moolenaar
parent 11005b078d
commit 7b7a118e74
3 changed files with 49 additions and 3 deletions

View File

@@ -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);
} }

View File

@@ -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

View File

@@ -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,
/**/ /**/