diff options
author | Jeremy Evans <code@jeremyevans.net> | 2020-07-15 08:38:44 -0700 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2020-11-13 11:35:10 +0900 |
commit | 957efa95cc12c608705a5663256226f022ea6c7f (patch) | |
tree | e85362f238f86d483025792f964477672576a13c | |
parent | 6325866421d552c43ecc0f631fc9e848f9a2862f (diff) | |
download | ruby-957efa95cc12c608705a5663256226f022ea6c7f.tar.gz |
[ruby/webrick] Allow empty POST and PUT requests without content length
RFC 7230 section 3.3.3 allows for this.
Fixes #30
https://github.com/ruby/webrick/commit/069e9b1908
-rw-r--r-- | lib/webrick/httprequest.rb | 2 | ||||
-rw-r--r-- | test/webrick/test_httprequest.rb | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/webrick/httprequest.rb b/lib/webrick/httprequest.rb index d1f0889673..d34eac7ecf 100644 --- a/lib/webrick/httprequest.rb +++ b/lib/webrick/httprequest.rb @@ -522,7 +522,7 @@ module WEBrick if @remaining_size > 0 && @socket.eof? raise HTTPStatus::BadRequest, "invalid body size." end - elsif BODY_CONTAINABLE_METHODS.member?(@request_method) + elsif BODY_CONTAINABLE_METHODS.member?(@request_method) && !@socket.eof raise HTTPStatus::LengthRequired end return @body diff --git a/test/webrick/test_httprequest.rb b/test/webrick/test_httprequest.rb index a594f14f72..759ccbdada 100644 --- a/test/webrick/test_httprequest.rb +++ b/test/webrick/test_httprequest.rb @@ -425,6 +425,18 @@ GET / assert_equal l, msg.size end + def test_empty_post + msg = <<-_end_of_message_ + POST /path?foo=x;foo=y;foo=z;bar=1 HTTP/1.1 + Host: test.ruby-lang.org:8080 + Content-Type: application/x-www-form-urlencoded + + _end_of_message_ + req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP) + req.parse(StringIO.new(msg.gsub(/^ {6}/, ""))) + req.body + end + def test_bad_messages param = "foo=1;foo=2;foo=3;bar=x" msg = <<-_end_of_message_ |