about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-09-27 20:48:20 -0700
committerEric Wong <normalperson@yhbt.net>2009-09-27 20:48:20 -0700
commit79c270990ec3a657c23510ee4f2f7f2b4c2c748f (patch)
treee760846dc5446b4a903cd7c7c8c6756fac8f6b54
parent3b0fcbf8baafbb88b2f15631b949fde9c8acff3b (diff)
downloadunicorn-79c270990ec3a657c23510ee4f2f7f2b4c2c748f.tar.gz
We've started using magic comments to ensure any strings we
create are binary instead.  Additionally, ensure we create any
StringIO objects with an explicit string (which default to
binary) to ensure the StringIO object is binary.  This is
because StringIO.new (with no arguments) will always use the
process-wide default encoding since it does not know about
magic comments (and couldn't, really...)
-rw-r--r--lib/unicorn.rb4
-rw-r--r--lib/unicorn/app/exec_cgi.rb6
-rw-r--r--lib/unicorn/app/inetd.rb7
-rw-r--r--lib/unicorn/cgi_wrapper.rb2
-rw-r--r--lib/unicorn/http_request.rb2
-rw-r--r--lib/unicorn/tee_input.rb4
6 files changed, 10 insertions, 15 deletions
diff --git a/lib/unicorn.rb b/lib/unicorn.rb
index 392d301..de61c09 100644
--- a/lib/unicorn.rb
+++ b/lib/unicorn.rb
@@ -15,10 +15,6 @@ module Unicorn
   autoload :TeeInput, 'unicorn/tee_input'
   autoload :Util, 'unicorn/util'
 
-  Z = '' # the stock empty string we use everywhere...
-  Z.force_encoding(Encoding::BINARY) if Z.respond_to?(:force_encoding)
-  Z.freeze
-
   class << self
     def run(app, options = {})
       HttpServer.new(app, options).start.join
diff --git a/lib/unicorn/app/exec_cgi.rb b/lib/unicorn/app/exec_cgi.rb
index 4f9216b..2262e4c 100644
--- a/lib/unicorn/app/exec_cgi.rb
+++ b/lib/unicorn/app/exec_cgi.rb
@@ -125,10 +125,10 @@ module Unicorn::App
       else
         tmp = Unicorn::Util.tmpio
 
-        buf = Unicorn::Z.dup
-        while inp.read(CHUNK_SIZE, buf)
+        buf = inp.read(CHUNK_SIZE)
+        begin
           tmp.syswrite(buf)
-        end
+        end while inp.read(CHUNK_SIZE, buf)
         tmp.sysseek(0)
         tmp
       end
diff --git a/lib/unicorn/app/inetd.rb b/lib/unicorn/app/inetd.rb
index f751a33..9bfa7cb 100644
--- a/lib/unicorn/app/inetd.rb
+++ b/lib/unicorn/app/inetd.rb
@@ -33,13 +33,12 @@ module Unicorn::App
         inp_pid = fork {
           input = env['rack.input']
           [ err_rd, out_rd ].each { |io| io.close }
-          buf = Unicorn::Z.dup
 
           # this is dependent on input.read having readpartial semantics:
-          while input.read(16384, buf)
+          buf = input.read(16384)
+          begin
             in_wr.write(buf)
-          end
-          in_wr.close
+          end while input.read(16384, buf)
         }
         in_wr.close
         self.pid_map = {
diff --git a/lib/unicorn/cgi_wrapper.rb b/lib/unicorn/cgi_wrapper.rb
index 64848b4..729efee 100644
--- a/lib/unicorn/cgi_wrapper.rb
+++ b/lib/unicorn/cgi_wrapper.rb
@@ -59,7 +59,7 @@ class Unicorn::CGIWrapper < ::CGI
     @status = nil
     @head = {}
     @headv = Hash.new { |hash,key| hash[key] = [] }
-    @body = StringIO.new
+    @body = StringIO.new("")
     super(*args)
   end
 
diff --git a/lib/unicorn/http_request.rb b/lib/unicorn/http_request.rb
index 4a78e73..1d978e6 100644
--- a/lib/unicorn/http_request.rb
+++ b/lib/unicorn/http_request.rb
@@ -19,7 +19,7 @@ module Unicorn
       "SERVER_SOFTWARE" => "Unicorn #{Const::UNICORN_VERSION}"
     }
 
-    NULL_IO = StringIO.new(Z)
+    NULL_IO = StringIO.new("")
     LOCALHOST = '127.0.0.1'
 
     # Being explicitly single-threaded, we have certain advantages in
diff --git a/lib/unicorn/tee_input.rb b/lib/unicorn/tee_input.rb
index 36a76ed..96a053a 100644
--- a/lib/unicorn/tee_input.rb
+++ b/lib/unicorn/tee_input.rb
@@ -15,7 +15,7 @@ module Unicorn
     def initialize(*args)
       super(*args)
       @size = parser.content_length
-      @tmp = @size && @size < Const::MAX_BODY ? StringIO.new(Z.dup) : Util.tmpio
+      @tmp = @size && @size < Const::MAX_BODY ? StringIO.new("") : Util.tmpio
       @buf2 = buf.dup
       if buf.size > 0
         parser.filter_body(@buf2, buf) and finalize_input
@@ -46,7 +46,7 @@ module Unicorn
 
       length = args.shift
       if nil == length
-        rv = @tmp.read || Z.dup
+        rv = @tmp.read || ""
         while tee(Const::CHUNK_SIZE, @buf2)
           rv << @buf2
         end