summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-03-28 09:26:12 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-03-28 09:26:12 +0000
commit276136af27cc9e86f7204d7e4b72f3dedac61f88 (patch)
tree15e08357e123f64f62128def09d967b00e9453da
parent64aec5c15eb31f4c44fe8aa8e908c9fb778fd5ac (diff)
webrick/httprequest: raise correct exception
"BadRequest" alone does not resolve correctly, it is in the HTTPStatus namespace. * lib/webrick/httprequest.rb (read_chunked): use correct exception * test/webrick/test_httpserver.rb (test_eof_in_chunk): new test git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_5@62981 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--lib/webrick/httprequest.rb2
-rw-r--r--test/webrick/test_httpserver.rb17
2 files changed, 18 insertions, 1 deletions
diff --git a/lib/webrick/httprequest.rb b/lib/webrick/httprequest.rb
index 551ef0b08f..44d605c58f 100644
--- a/lib/webrick/httprequest.rb
+++ b/lib/webrick/httprequest.rb
@@ -511,7 +511,7 @@ module WEBrick
while chunk_size > 0
data = read_data(socket, chunk_size) # read chunk-data
if data.nil? || data.bytesize != chunk_size
- raise BadRequest, "bad chunk data size."
+ raise HTTPStatus::BadRequest, "bad chunk data size."
end
read_line(socket) # skip CRLF
block.call(data)
diff --git a/test/webrick/test_httpserver.rb b/test/webrick/test_httpserver.rb
index 070422f48c..16f08711d8 100644
--- a/test/webrick/test_httpserver.rb
+++ b/test/webrick/test_httpserver.rb
@@ -457,4 +457,21 @@ class TestWEBrickHTTPServer < Test::Unit::TestCase
end
}
end
+
+ def test_eof_in_chunk
+ log_tester = lambda do |log, access_log|
+ assert_equal 1, log.size
+ assert log[0].include?('ERROR bad chunk data size')
+ end
+ TestWEBrick.start_httpserver({}, log_tester){|server, addr, port, log|
+ server.mount_proc('/', ->(req, res) { res.body = req.body })
+ TCPSocket.open(addr, port) do |c|
+ c.write("POST / HTTP/1.1\r\nHost: example.com\r\n" \
+ "Transfer-Encoding: chunked\r\n\r\n5\r\na")
+ c.shutdown(Socket::SHUT_WR) # trigger EOF in server
+ res = c.read
+ assert_match %r{\AHTTP/1\.1 400 }, res
+ end
+ }
+ end
end