diff options
author | Eric Wong <normalperson@yhbt.net> | 2010-11-18 07:36:27 +0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-11-18 07:36:27 +0800 |
commit | 3362dc51934c15fd944748e55ba4a470cc60d27d (patch) | |
tree | 483f0ed5401889855d104fd62cc19784e0397eb4 | |
parent | 390e351dd1283d4c80a12b744b1327fff091a141 (diff) | |
download | unicorn-3362dc51934c15fd944748e55ba4a470cc60d27d.tar.gz |
Any calls to read with an explicit zero length now returns an empty string. While not explicitly specified by Rack::Lint, this is for compatibility with StringIO and IO methods which are common in other web servers.
-rw-r--r-- | lib/unicorn/stream_input.rb | 2 | ||||
-rw-r--r-- | test/unit/test_stream_input.rb | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/lib/unicorn/stream_input.rb b/lib/unicorn/stream_input.rb index 2c8e40a..ef8997e 100644 --- a/lib/unicorn/stream_input.rb +++ b/lib/unicorn/stream_input.rb @@ -60,7 +60,7 @@ class Unicorn::StreamInput @rbuf.replace('') end end - rv = nil if rv.empty? + rv = nil if rv.empty? && length != 0 end rv end diff --git a/test/unit/test_stream_input.rb b/test/unit/test_stream_input.rb index 20e048d..adf4571 100644 --- a/test/unit/test_stream_input.rb +++ b/test/unit/test_stream_input.rb @@ -129,6 +129,23 @@ class TestStreamInput < Test::Unit::TestCase assert_equal '', buf end + def test_read_zero + r = init_request('hello') + si = Unicorn::StreamInput.new(@rd, r) + assert_equal '', si.read(0) + buf = 'asdf' + rv = si.read(0, buf) + assert_equal rv.object_id, buf.object_id + assert_equal '', buf + assert_equal 'hello', si.read + assert_nil si.read(5) + assert_equal '', si.read(0) + buf = 'hello' + rv = si.read(0, buf) + assert_equal rv.object_id, buf.object_id + assert_equal '', rv + end + def init_request(body, size = nil) @parser = Unicorn::HttpParser.new body = body.to_s.freeze |