diff options
Diffstat (limited to 't/preread_input.ru')
-rw-r--r-- | t/preread_input.ru | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/t/preread_input.ru b/t/preread_input.ru index 79685c4..5f68fe9 100644 --- a/t/preread_input.ru +++ b/t/preread_input.ru @@ -1,17 +1,23 @@ #\-E none -require 'digest/sha1' +# frozen_string_literal: false +require 'digest/md5' require 'unicorn/preread_input' -use Rack::ContentLength -use Rack::ContentType, "text/plain" use Unicorn::PrereadInput nr = 0 run lambda { |env| $stderr.write "app dispatch: #{nr += 1}\n" input = env["rack.input"] - dig = Digest::SHA1.new - while buf = input.read(16384) - dig.update(buf) + dig = Digest::MD5.new + if buf = input.read(16384) + begin + dig.update(buf) + end while input.read(16384, buf) + buf.clear # remove this call if Ruby ever gets escape analysis end - - [ 200, {}, [ "#{dig.hexdigest}\n" ] ] + if env['HTTP_TRAILER'] =~ /\bContent-MD5\b/i + cmd5_b64 = env['HTTP_CONTENT_MD5'] or return [500, {}, ['No Content-MD5']] + cmd5_bin = cmd5_b64.unpack('m')[0] + return [500, {}, [ cmd5_b64 ] ] if cmd5_bin != dig.digest + end + [ 200, {}, [ dig.hexdigest ] ] } |