From 17a95c126a178b17292637785c6ec09bb1180493 Mon Sep 17 00:00:00 2001 From: "E. Westbrook" Date: Sun, 19 Aug 2018 11:32:42 -0600 Subject: url.lua:absolute_path(): fix issue #254, simplify, add more test cases --- src/url.lua | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/url.lua b/src/url.lua index 110ea94..29b6734 100644 --- a/src/url.lua +++ b/src/url.lua @@ -88,20 +88,18 @@ local function absolute_path(base_path, relative_path) if string.sub(relative_path, 1, 1) == "/" then return relative_path end local path = string.gsub(base_path, "[^/]*$", "") path = path .. relative_path - path = string.gsub(path, "([^/]*%./)", function (s) - if s ~= "./" then return s else return "" end - end) - path = string.gsub(path, "/%.$", "/") - local reduced - while reduced ~= path do - reduced = path - path = string.gsub(reduced, "([^/]*/%.%./)", function (s) - if s ~= "../../" then return "" else return s end - end) - end - path = string.gsub(reduced, "([^/]*/%.%.)$", function (s) - if s ~= "../.." then return "" else return s end - end) + repeat + local was = path + path = path:gsub('/%./', '/') + until path == was + repeat + local was = path + path = path:gsub('[^/]+/%.%./([^/]+)', '%1') + until path == was + path = path:gsub('[^/]+/%.%./*$', '') + path = path:gsub('/%.%.$', '/') + path = path:gsub('/%.$', '/') + path = path:gsub('^/%.%.', '') return path end -- cgit v1.2.3-55-g6feb