url.lua:remove_dot_components(): empty path component double-dot corner case

This commit is contained in:
E. Westbrook 2018-08-21 11:27:42 -06:00
parent 5b862e6a3c
commit 38d936ec0e
2 changed files with 5 additions and 0 deletions

View File

@ -87,6 +87,10 @@ local function remove_dot_components(path)
local was = path local was = path
path = path:gsub('/%./', '/', 1) path = path:gsub('/%./', '/', 1)
until path == was until path == was
repeat
local was = path
path = path:gsub('//%.%./([^/]+)', '/%1', 1)
until path == was
repeat repeat
local was = path local was = path
path = path:gsub('[^/]+/%.%./([^/]+)', '%1', 1) path = path:gsub('[^/]+/%.%./([^/]+)', '%1', 1)

View File

@ -691,6 +691,7 @@ check_absolute_url("http://example.com/a/b/c/d/", "../q", "http://example.com/a/
check_absolute_url("http://example.com/a/b/c/d/", "../../q", "http://example.com/a/b/q") check_absolute_url("http://example.com/a/b/c/d/", "../../q", "http://example.com/a/b/q")
check_absolute_url("http://example.com/a/b/c/d/", "../../../q", "http://example.com/a/q") check_absolute_url("http://example.com/a/b/c/d/", "../../../q", "http://example.com/a/q")
check_absolute_url("http://example.com", ".badhost.com", "http://example.com/.badhost.com") check_absolute_url("http://example.com", ".badhost.com", "http://example.com/.badhost.com")
check_absolute_url("http://example.com/a/b/c/d/", "..//../../../q", "http://example.com/a/q")
print("testing path parsing and composition") print("testing path parsing and composition")
check_parse_path("/eu/tu/ele", { "eu", "tu", "ele"; is_absolute = 1 }) check_parse_path("/eu/tu/ele", { "eu", "tu", "ele"; is_absolute = 1 })