Skip to content

Commit abc9e06

Browse files
authored
net.urllib: fix parsing url error, when querypath is '//' (fix #20476) (#20504)
1 parent 62872c6 commit abc9e06

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

vlib/net/urllib/urllib.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,8 @@ fn parse_url(rawurl string, via_request bool) !URL {
512512
''))
513513
}
514514
}
515-
if ((url.scheme != '' || !via_request) && !rest.starts_with('///')) && rest.starts_with('//') {
515+
if ((url.scheme != '' || !via_request) && !rest.starts_with('///')) && rest.starts_with('//')
516+
&& rest.len > 2 {
516517
authority, r := split(rest[2..], `/`, false)
517518
rest = r
518519
a := parse_authority(authority)!

vlib/net/urllib/urllib_test.v

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,9 @@ fn test_parse() {
122122
}
123123
}
124124
}
125+
126+
fn test_parse_slashes() {
127+
assert urllib.parse('/')!.str() == '/'
128+
assert urllib.parse('//')!.str() == '//'
129+
assert urllib.parse('///')!.str() == '///'
130+
}

vlib/vweb/tests/vweb_test.v

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,3 +339,16 @@ ${config.content}'
339339
}
340340
return read.bytestr()
341341
}
342+
343+
// for issue 20476
344+
// phenomenon: parsing url error when querypath is `//`
345+
fn test_empty_querypath() {
346+
mut x := http.get('http://${localserver}') or { panic(err) }
347+
assert x.body == 'Welcome to VWeb'
348+
x = http.get('http://${localserver}/') or { panic(err) }
349+
assert x.body == 'Welcome to VWeb'
350+
x = http.get('http://${localserver}//') or { panic(err) }
351+
assert x.body == 'Welcome to VWeb'
352+
x = http.get('http://${localserver}///') or { panic(err) }
353+
assert x.body == 'Welcome to VWeb'
354+
}

0 commit comments

Comments
 (0)