Increase compatibility of SGI-CGI with CGI1.1 standard
authorSteven Barth <steven@midlink.org>
Sat, 8 Nov 2008 20:23:55 +0000 (20:23 +0000)
committerSteven Barth <steven@midlink.org>
Sat, 8 Nov 2008 20:23:55 +0000 (20:23 +0000)
libs/sgi-cgi/luasrc/sgi/cgi.lua

index d36d43fb51973c3b50014a6b08ed97e37d09759d..15363a1a15340a9a015190424e5a30a594815c9e 100644 (file)
@@ -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