* luci/libs: make treatment of "+" conditional in http.protocol ("+" should not be...
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 5 Jul 2008 20:12:24 +0000 (20:12 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Sat, 5 Jul 2008 20:12:24 +0000 (20:12 +0000)
* luci/https: fix breakage introduced by "+" decoding

libs/http/luasrc/http/protocol.lua
libs/httpd/luasrc/httpd/handler/file.lua

index a187bed..b8e9624 100644 (file)
@@ -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
 
index db8a476..92cf7ed 100644 (file)
@@ -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