X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=modules%2Fluci-base%2Fluasrc%2Fhttp.lua;h=20b55f2854ff3304de29748131472a1419c66f4c;hb=0560858380a583e0ce26a99a2396d8255f138cf8;hp=be5577ee0932931b207b9b7f694cb391a6c52799;hpb=914c661b58fc7e2dede1b9b4f83544b05232065c;p=oweals%2Fluci.git diff --git a/modules/luci-base/luasrc/http.lua b/modules/luci-base/luasrc/http.lua index be5577ee0..20b55f285 100644 --- a/modules/luci-base/luasrc/http.lua +++ b/modules/luci-base/luasrc/http.lua @@ -14,7 +14,7 @@ local table, ipairs, pairs, type, tostring, tonumber, error = module "luci.http" -HTTP_MAX_CONTENT = 1024*8 -- 8 kB maximum content size +HTTP_MAX_CONTENT = 1024*100 -- 100 kB maximum content size context = util.threadlocal() @@ -335,13 +335,13 @@ end -- Content-Type. Stores all extracted data associated with its parameter name -- in the params table within the given message object. Multiple parameter -- values are stored as tables, ordinary ones as strings. --- If an optional file callback function is given then it is feeded with the +-- If an optional file callback function is given then it is fed with the -- file contents chunk by chunk and only the extracted file name is stored -- within the params table. The callback function will be called subsequently -- with three arguments: -- o Table containing decoded (name, file) and raw (headers) mime header data -- o String value containing a chunk of the file data --- o Boolean which indicates wheather the current chunk is the last one (eof) +-- o Boolean which indicates whether the current chunk is the last one (eof) function mimedecode_message_body(src, msg, file_cb) local parser, header, field local len, maxlen = 0, tonumber(msg.env.CONTENT_LENGTH or nil) @@ -416,7 +416,7 @@ function mimedecode_message_body(src, msg, file_cb) end return true - end) + end, HTTP_MAX_CONTENT) return ltn12.pump.all(src, function (chunk) len = len + (chunk and #chunk or 0) @@ -460,7 +460,7 @@ function urldecode_message_body(src, msg) end return true - end) + end, HTTP_MAX_CONTENT) return ltn12.pump.all(src, function (chunk) len = len + (chunk and #chunk or 0) @@ -486,26 +486,22 @@ end -- handled then the whole message body will be stored unaltered as "content" -- property within the given message object. function parse_message_body(src, msg, filecb) - local ctype = lhttp.header_attribute(msg.env.CONTENT_TYPE, nil) - - -- Is it multipart/mime ? - if msg.env.REQUEST_METHOD == "POST" and - ctype == "multipart/form-data" - then - return mimedecode_message_body(src, msg, filecb) + if msg.env.CONTENT_LENGTH or msg.env.REQUEST_METHOD == "POST" then + local ctype = lhttp.header_attribute(msg.env.CONTENT_TYPE, nil) - -- Is it application/x-www-form-urlencoded ? - elseif msg.env.REQUEST_METHOD == "POST" and - ctype == "application/x-www-form-urlencoded" - then - return urldecode_message_body(src, msg) + -- Is it multipart/mime ? + if ctype == "multipart/form-data" then + return mimedecode_message_body(src, msg, filecb) + -- Is it application/x-www-form-urlencoded ? + elseif ctype == "application/x-www-form-urlencoded" then + return urldecode_message_body(src, msg) - -- Unhandled encoding - -- If a file callback is given then feed it chunk by chunk, else - -- store whole buffer in message.content - else + end + -- Unhandled encoding + -- If a file callback is given then feed it chunk by chunk, else + -- store whole buffer in message.content local sink -- If we have a file callback then feed it @@ -553,4 +549,6 @@ function parse_message_body(src, msg, filecb) return true end + + return false end