summaryrefslogtreecommitdiffhomepage
path: root/libs
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2008-07-05 20:12:24 +0000
committerJo-Philipp Wich <jow@openwrt.org>2008-07-05 20:12:24 +0000
commit8fcbdb39feb7922a2a6b8bd5cf16aca90e93a624 (patch)
treed2549fb9f36aa4d46e366747e7b0cb18ddeb2f4e /libs
parentbbe086c9ce76c6abbc26434462736bb8b42f2a6c (diff)
* luci/libs: make treatment of "+" conditional in http.protocol ("+" should not be decoded by urldecode)
* luci/https: fix breakage introduced by "+" decoding
Diffstat (limited to 'libs')
-rw-r--r--libs/http/luasrc/http/protocol.lua7
-rw-r--r--libs/httpd/luasrc/httpd/handler/file.lua4
2 files changed, 7 insertions, 4 deletions
diff --git a/libs/http/luasrc/http/protocol.lua b/libs/http/luasrc/http/protocol.lua
index a187bed2e..b8e962449 100644
--- a/libs/http/luasrc/http/protocol.lua
+++ b/libs/http/luasrc/http/protocol.lua
@@ -23,14 +23,17 @@ HTTP_URLENC_MAXKEYLEN = 1024 -- maximum allowd size of urlencoded parameter nam
-- Decode an urlencoded string.
-- Returns the decoded value.
-function urldecode( str )
+function urldecode( str, no_plus )
local function __chrdec( hex )
return string.char( tonumber( hex, 16 ) )
end
if type(str) == "string" then
- str = str:gsub( "+", " " )
+ if not no_plus then
+ str = str:gsub( "+", " " )
+ end
+
str = str:gsub( "%%([a-fA-F0-9][a-fA-F0-9])", __chrdec )
end
diff --git a/libs/httpd/luasrc/httpd/handler/file.lua b/libs/httpd/luasrc/httpd/handler/file.lua
index db8a476d4..92cf7ed0a 100644
--- a/libs/httpd/luasrc/httpd/handler/file.lua
+++ b/libs/httpd/luasrc/httpd/handler/file.lua
@@ -44,7 +44,7 @@ function Simple.getfile(self, uri)
end
function Simple.handle_get(self, request, sourcein, sinkerr)
- local file, stat = self:getfile( self.proto.urldecode( request.env.PATH_INFO ) )
+ local file, stat = self:getfile( self.proto.urldecode( request.env.PATH_INFO, true ) )
if stat then
if stat.type == "regular" then
@@ -95,7 +95,7 @@ function Simple.handle_get(self, request, sourcein, sinkerr)
elseif stat.type == "directory" then
local ruri = request.request_uri:gsub("/$","")
- local duri = self.proto.urldecode( ruri )
+ local duri = self.proto.urldecode( ruri, true )
local root = self.docroot:gsub("/$","")
-- check for index files