diff options
author | Steven Barth <steven@midlink.org> | 2008-11-08 20:23:55 +0000 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2008-11-08 20:23:55 +0000 |
commit | ce4c71cda0a35ef8cbd075748d7af3692fcae83a (patch) | |
tree | 2f31e0f3ba2afaef2391a7a48fe4cfa9abb0d45e /libs/sgi-cgi | |
parent | f64847e2ddd99980ce816c53d1cf5de6c4c97a27 (diff) |
Increase compatibility of SGI-CGI with CGI1.1 standard
Diffstat (limited to 'libs/sgi-cgi')
-rw-r--r-- | libs/sgi-cgi/luasrc/sgi/cgi.lua | 24 |
1 files changed, 23 insertions, 1 deletions
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 |