-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
---
+--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
local urldecode = require "util.http".urldecode;
function sanitize_path(path)
+ if not path then return end
local out = {};
local c = 0;
out[c] = component;
end
end
+ if path:sub(-1,-1) == "/" then
+ out[c+1] = "";
+ end
return "/"..table.concat(out, "/");
end
local directory_index = opts.directory_index;
local function serve_file(event, path)
local request, response = event.request, event.response;
- path = sanitize_path(path);
- if not path then
+ local sanitized_path = sanitize_path(path);
+ if path and not sanitized_path then
return 400;
end
+ path = sanitized_path;
local orig_path = sanitize_path(request.path);
- local full_path = base_path .. (path and "/"..path or ""):gsub("/", path_sep);
+ local full_path = base_path .. (path or ""):gsub("/", path_sep);
local attr = stat(full_path:match("^.*[^\\/]")); -- Strip trailing path separator because Windows
if not attr then
return 404;