aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorE. Westbrook <github@westbrook.io>2018-08-21 09:07:42 -0600
committerE. Westbrook <github@westbrook.io>2018-08-21 09:07:42 -0600
commitc570a32c219c957fd405ed018f2500f06952c043 (patch)
tree0b477575f2a63946a49f04296c91e246da7d2ec9
parentc905b5d44f8cdfbc8110a9a7d1d62c08b5703ae3 (diff)
downloadluasocket-c570a32c219c957fd405ed018f2500f06952c043.tar.gz
luasocket-c570a32c219c957fd405ed018f2500f06952c043.tar.bz2
luasocket-c570a32c219c957fd405ed018f2500f06952c043.zip
url.lua:remove_dot_components(): limit beginning-of-string double-dot corner case to prevent triple-dot activation and authority collision
-rw-r--r--src/url.lua2
-rw-r--r--test/urltest.lua1
2 files changed, 2 insertions, 1 deletions
diff --git a/src/url.lua b/src/url.lua
index a354ab5..0d88adb 100644
--- a/src/url.lua
+++ b/src/url.lua
@@ -94,7 +94,7 @@ local function remove_dot_components(path)
94 path = path:gsub('[^/]+/%.%./*$', '') 94 path = path:gsub('[^/]+/%.%./*$', '')
95 path = path:gsub('/%.%.$', '/') 95 path = path:gsub('/%.%.$', '/')
96 path = path:gsub('/%.$', '/') 96 path = path:gsub('/%.$', '/')
97 path = path:gsub('^/%.%.', '') 97 path = path:gsub('^/%.%./', '/')
98 return path 98 return path
99end 99end
100 100
diff --git a/test/urltest.lua b/test/urltest.lua
index 649be88..8664fa6 100644
--- a/test/urltest.lua
+++ b/test/urltest.lua
@@ -685,6 +685,7 @@ check_absolute_url("a/b/c/d/../", "d/e/f", "a/b/c/d/e/f")
685check_absolute_url("http://velox.telemar.com.br", "/dashboard/index.html", 685check_absolute_url("http://velox.telemar.com.br", "/dashboard/index.html",
686 "http://velox.telemar.com.br/dashboard/index.html") 686 "http://velox.telemar.com.br/dashboard/index.html")
687check_absolute_url("http://example.com/", "../.badhost.com/", "http://example.com/.badhost.com/") 687check_absolute_url("http://example.com/", "../.badhost.com/", "http://example.com/.badhost.com/")
688check_absolute_url("http://example.com/", "...badhost.com/", "http://example.com/...badhost.com/")
688 689
689print("testing path parsing and composition") 690print("testing path parsing and composition")
690check_parse_path("/eu/tu/ele", { "eu", "tu", "ele"; is_absolute = 1 }) 691check_parse_path("/eu/tu/ele", { "eu", "tu", "ele"; is_absolute = 1 })