about summary refs log tree commit homepage
path: root/lib/yahns/http_context.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/yahns/http_context.rb')
-rw-r--r--lib/yahns/http_context.rb17
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/yahns/http_context.rb b/lib/yahns/http_context.rb
index c7258ad..10be062 100644
--- a/lib/yahns/http_context.rb
+++ b/lib/yahns/http_context.rb
@@ -80,13 +80,16 @@ module Yahns::HttpContext # :nodoc:
 
   def tmpio_for(len, env)
     # short requests are most common
-    return StringIO.new.binmode if len && len <= @client_body_buffer_size;
-
-    # too big or chunked, unknown length
-    tmp = @input_buffer_tmpdir
-    mbs = @client_max_body_size
-    tmp = mbs ? Yahns::CapInput.new(mbs, tmp) : Yahns::TmpIO.new(tmp)
-    (env['rack.tempfiles'] ||= []) << tmp
+    if len && len <= @client_body_buffer_size;
+      # Can't use binmode, yet: https://bugs.ruby-lang.org/issues/11945
+      tmp = StringIO.new
+      tmp.set_encoding(Encoding::ASCII_8BIT)
+    else # too big or chunked, unknown length
+      tmp = @input_buffer_tmpdir
+      mbs = @client_max_body_size
+      tmp = mbs ? Yahns::CapInput.new(mbs, tmp) : Yahns::TmpIO.new(tmp)
+      (env['rack.tempfiles'] ||= []) << tmp
+    end
     tmp
   end
 end