From: Steven Barth Date: Sat, 8 Nov 2008 20:23:55 +0000 (+0000) Subject: Increase compatibility of SGI-CGI with CGI1.1 standard X-Git-Tag: 0.9.0~991 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ce4c71cda0a35ef8cbd075748d7af3692fcae83a;p=oweals%2Fluci.git Increase compatibility of SGI-CGI with CGI1.1 standard --- diff --git a/libs/sgi-cgi/luasrc/sgi/cgi.lua b/libs/sgi-cgi/luasrc/sgi/cgi.lua index d36d43fb5..15363a1a1 100644 --- a/libs/sgi-cgi/luasrc/sgi/cgi.lua +++ b/libs/sgi-cgi/luasrc/sgi/cgi.lua @@ -29,10 +29,30 @@ require("luci.http") require("luci.sys") require("luci.dispatcher") +-- Limited source to avoid endless blocking +local function limitsource(handle, limit) + limit = limit or 0 + local BLOCKSIZE = ltn12.BLOCKSIZE + + return function() + if limit < 1 then + handle:close() + return nil + else + local read = (limit > BLOCKSIZE) and BLOCKSIZE or limit + limit = limit - read + + local chunk = handle:read(read) + if not chunk then handle:close() end + return chunk + end + end +end + function run() local r = luci.http.Request( luci.sys.getenv(), - ltn12.source.file(io.stdin), + limitsource(io.stdin, tonumber(luci.sys.getenv("CONTENT_LENGTH"))), ltn12.sink.file(io.stderr) ) @@ -61,6 +81,8 @@ function run() elseif id == 4 then io.write(data1) elseif id == 5 then + io.flush() + io.close() active = false end end