unicorn 3.0.0pre1 → 3.0.0pre1.9.g86d2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -500,7 +500,7 @@ class Unicorn::HttpServer
500
500
  msg = case e
501
501
  when EOFError,Errno::ECONNRESET,Errno::EPIPE,Errno::EINVAL,Errno::EBADF
502
502
  Unicorn::Const::ERROR_500_RESPONSE
503
- when HttpParserError # try to tell the client they're bad
503
+ when Unicorn::HttpParserError # try to tell the client they're bad
504
504
  Unicorn::Const::ERROR_400_RESPONSE
505
505
  else
506
506
  logger.error "Read error: #{e.inspect}"
@@ -60,7 +60,7 @@ class Unicorn::StreamInput
60
60
  @rbuf.replace('')
61
61
  end
62
62
  end
63
- rv = nil if rv.empty?
63
+ rv = nil if rv.empty? && length != 0
64
64
  end
65
65
  rv
66
66
  end
@@ -0,0 +1,31 @@
1
+ #!/bin/sh
2
+ . ./test-lib.sh
3
+ t_plan 5 "parser error test"
4
+
5
+ t_begin "setup and startup" && {
6
+ unicorn_setup
7
+ unicorn -D env.ru -c $unicorn_config
8
+ unicorn_wait_start
9
+ }
10
+
11
+ t_begin "send a bad request" && {
12
+ (
13
+ printf 'GET / HTTP/1/1\r\nHost: example.com\r\n\r\n'
14
+ cat $fifo > $tmp &
15
+ wait
16
+ echo ok > $ok
17
+ ) | socat - TCP:$listen > $fifo
18
+ test xok = x$(cat $ok)
19
+ }
20
+
21
+ dbgcat tmp
22
+
23
+ t_begin "response should be a 400" && {
24
+ grep -F 'HTTP/1.1 400 Bad Request' $tmp
25
+ }
26
+
27
+ t_begin "server stderr should be clean" && check_stderr
28
+
29
+ t_begin "term signal sent" && kill $unicorn_pid
30
+
31
+ t_done
data/t/t0013.ru ADDED
@@ -0,0 +1,12 @@
1
+ #\ -E none
2
+ use Rack::ContentLength
3
+ use Rack::ContentType, 'text/plain'
4
+ app = lambda do |env|
5
+ case env['rack.input']
6
+ when Unicorn::StreamInput
7
+ [ 200, {}, %w(OK) ]
8
+ else
9
+ [ 500, {}, %w(NO) ]
10
+ end
11
+ end
12
+ run app
data/t/t0014.ru ADDED
@@ -0,0 +1,12 @@
1
+ #\ -E none
2
+ use Rack::ContentLength
3
+ use Rack::ContentType, 'text/plain'
4
+ app = lambda do |env|
5
+ case env['rack.input']
6
+ when Unicorn::TeeInput
7
+ [ 200, {}, %w(OK) ]
8
+ else
9
+ [ 500, {}, %w(NO) ]
10
+ end
11
+ end
12
+ run app
@@ -129,6 +129,23 @@ class TestStreamInput < Test::Unit::TestCase
129
129
  assert_equal '', buf
130
130
  end
131
131
 
132
+ def test_read_zero
133
+ r = init_request('hello')
134
+ si = Unicorn::StreamInput.new(@rd, r)
135
+ assert_equal '', si.read(0)
136
+ buf = 'asdf'
137
+ rv = si.read(0, buf)
138
+ assert_equal rv.object_id, buf.object_id
139
+ assert_equal '', buf
140
+ assert_equal 'hello', si.read
141
+ assert_nil si.read(5)
142
+ assert_equal '', si.read(0)
143
+ buf = 'hello'
144
+ rv = si.read(0, buf)
145
+ assert_equal rv.object_id, buf.object_id
146
+ assert_equal '', rv
147
+ end
148
+
132
149
  def init_request(body, size = nil)
133
150
  @parser = Unicorn::HttpParser.new
134
151
  body = body.to_s.freeze
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- hash: -766259879
4
+ hash: -5096542530
5
5
  prerelease: true
6
6
  segments:
7
7
  - 3
8
8
  - 0
9
9
  - 0pre1
10
- version: 3.0.0pre1
10
+ - 9
11
+ - g86d2
12
+ version: 3.0.0pre1.9.g86d2
11
13
  platform: ruby
12
14
  authors:
13
15
  - Unicorn hackers
@@ -15,7 +17,7 @@ autorequire:
15
17
  bindir: bin
16
18
  cert_chain: []
17
19
 
18
- date: 2010-11-17 00:00:00 +00:00
20
+ date: 2010-11-17 00:00:00 +08:00
19
21
  default_executable:
20
22
  dependencies:
21
23
  - !ruby/object:Gem::Dependency
@@ -232,6 +234,7 @@ files:
232
234
  - t/t0000-http-basic.sh
233
235
  - t/t0001-reload-bad-config.sh
234
236
  - t/t0002-config-conflict.sh
237
+ - t/t0002-parser-error.sh
235
238
  - t/t0003-working_directory.sh
236
239
  - t/t0004-working_directory_broken.sh
237
240
  - t/t0005-working_directory_app.rb.sh
@@ -244,7 +247,9 @@ files:
244
247
  - t/t0011-active-unix-socket.sh
245
248
  - t/t0012-reload-empty-config.sh
246
249
  - t/t0013-rewindable-input-false.sh
250
+ - t/t0013.ru
247
251
  - t/t0014-rewindable-input-true.sh
252
+ - t/t0014.ru
248
253
  - t/t0300-rails3-basic.sh
249
254
  - t/t0301-rails3-missing-config-ru.sh
250
255
  - t/t0302-rails3-alt-working_directory.sh