Software /
code /
prosody
Diff
net/http/parser.lua @ 4716:6eeb142a8073
mod_http_files, net.http.parser: Move path normalization to net.http.parser so that all modules can benefit
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 26 Apr 2012 16:48:16 +0100 |
parent | 4712:4fc99f1b7570 |
child | 4866:d54999db3aa1 |
line wrap: on
line diff
--- a/net/http/parser.lua Thu Apr 26 16:25:17 2012 +0100 +++ b/net/http/parser.lua Thu Apr 26 16:48:16 2012 +0100 @@ -2,6 +2,24 @@ local tonumber = tonumber; local assert = assert; +local function preprocess_path(path) + if path:sub(1,1) ~= "/" then + path = "/"..path; + end + local level = 0; + for component in path:gmatch("([^/]+)/") do + if component == ".." then + level = level - 1; + elseif component ~= "." then + level = level + 1; + end + if level < 0 then + return nil; + end + end + return path; +end + local httpstream = {}; function httpstream.new(success_cb, error_cb, parser_type, options_cb) @@ -74,7 +92,7 @@ if path:match("^https?://") then headers.host, path = path:match("^https?://([^/]*)(.*)"); end - path = path:gsub("^//+", "/"); -- TODO parse url more + path = preprocess_path(path); len = len or 0; packet = {