luci-base: decode plus signs in x-www-form-urlencoded POST data
authorJo-Philipp Wich <jo@mein.io>
Sun, 22 Apr 2018 10:03:23 +0000 (12:03 +0200)
committerJo-Philipp Wich <jo@mein.io>
Sun, 22 Apr 2018 10:03:23 +0000 (12:03 +0200)
Depends on 5ef51b2ab ("lucihttp: update to latest HEAD").
Fixes #1755.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/luasrc/http.lua

index 29edb4470e921947635566a552faab783bebb63a..56d0064825a8ea47a9027bbbe380c5dccce3cfaf 100644 (file)
@@ -443,16 +443,16 @@ function urldecode_message_body(src, msg)
                if what == parser.TUPLE then
                        name, value = nil, nil
                elseif what == parser.NAME then
-                       name = lhttp.urldecode(buffer)
+                       name = lhttp.urldecode(buffer, lhttp.DECODE_PLUS)
                elseif what == parser.VALUE and name then
                        local val = msg.params[name]
 
                        if type(val) == "table" then
-                               val[#val+1] = lhttp.urldecode(buffer) or ""
+                               val[#val+1] = lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or ""
                        elseif val ~= nil then
-                               msg.params[name] = { val, lhttp.urldecode(buffer) or "" }
+                               msg.params[name] = { val, lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or "" }
                        else
-                               msg.params[name] = lhttp.urldecode(buffer) or ""
+                               msg.params[name] = lhttp.urldecode(buffer, lhttp.DECODE_PLUS) or ""
                        end
                elseif what == parser.ERROR then
                        err = buffer