about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--extras/exec_cgi.rb17
-rw-r--r--test/test_extras_exec_cgi.rb9
2 files changed, 8 insertions, 18 deletions
diff --git a/extras/exec_cgi.rb b/extras/exec_cgi.rb
index 89fc9b4..39042af 100644
--- a/extras/exec_cgi.rb
+++ b/extras/exec_cgi.rb
@@ -8,19 +8,15 @@ class ExecCgi
   class MyIO < Kgio::Pipe
     attr_writer :my_pid
     attr_writer :body_tip
-    attr_writer :chunked
 
     def each
       buf = @body_tip || ""
       if buf.size > 0
-        buf = "#{buf.size.to_s(16)}\r\n#{buf}\r\n" if @chunked
         yield buf
       end
       while tmp = kgio_read(8192, buf)
-        tmp = "#{tmp.size.to_s(16)}\r\n#{tmp}\r\n" if @chunked
         yield tmp
       end
-      yield("0\r\n\r\n") if @chunked
       self
     ensure
       # do this sooner, since the response body may be buffered, we want
@@ -90,7 +86,8 @@ class ExecCgi
       end
       head, body = head.split(/\r?\n\r?\n/)
       pipe.body_tip = body
-      pipe.chunked = false
+
+      env["HTTP_VERSION"] ||= "HTTP/1.0" # stop Rack::Chunked for HTTP/0.9
 
       headers = Rack::Utils::HeaderHash.new
       prev = nil
@@ -101,16 +98,6 @@ class ExecCgi
         end
       end
       status = headers.delete("Status") || 200
-      unless headers.include?("Content-Length") ||
-             headers.include?("Transfer-Encoding")
-        case env['HTTP_VERSION']
-        when 'HTTP/1.0', nil
-          # server will drop connection anyways
-        else
-          headers["Transfer-Encoding"] = "chunked"
-          pipe.chunked = true
-        end
-      end
       errbody = nil
       [ status, headers, pipe ]
     else
diff --git a/test/test_extras_exec_cgi.rb b/test/test_extras_exec_cgi.rb
index c5c190d..6fa4dbb 100644
--- a/test/test_extras_exec_cgi.rb
+++ b/test/test_extras_exec_cgi.rb
@@ -17,7 +17,8 @@ class TestExtrasExecCGI < Testcase
     pid = mkserver(cfg) do
       require './extras/exec_cgi'
       cfg.instance_eval do
-        app(:rack, ExecCgi.new(RUNME)) { listen "#{host}:#{port}" }
+        stack = Rack::ContentLength.new(Rack::Chunked.new(ExecCgi.new(RUNME)))
+        app(:rack, stack) { listen "#{host}:#{port}" }
         stderr_path err.path
         worker_processes 1
       end
@@ -96,7 +97,8 @@ class TestExtrasExecCGI < Testcase
     pid = mkserver(cfg) do
       require './extras/exec_cgi'
       cfg.instance_eval do
-        app(:rack, ExecCgi.new(RUNME)) { listen "#{host}:#{port}" }
+        stack = Rack::ContentLength.new(Rack::Chunked.new(ExecCgi.new(RUNME)))
+        app(:rack, stack) { listen "#{host}:#{port}" }
         stderr_path err.path
         worker_processes 1
       end
@@ -133,7 +135,8 @@ class TestExtrasExecCGI < Testcase
       Yahns::HttpClient.__send__(:include, TrywriteBlocked)
       require './extras/exec_cgi'
       cfg.instance_eval do
-        app(:rack, ExecCgi.new(RUNME)) { listen "#{host}:#{port}" }
+        stack = Rack::ContentLength.new(Rack::Chunked.new(ExecCgi.new(RUNME)))
+        app(:rack, stack) { listen "#{host}:#{port}" }
         stderr_path err.path
         worker_processes 1
       end