[前][次][番号順一覧][スレッド一覧]

ruby-changes:63071

From: Jeremy <ko1@a...>
Date: Thu, 24 Sep 2020 21:42:27 +0900 (JST)
Subject: [ruby-changes:63071] ed12019ce6 (master): [ruby/webrick] Allow empty POST and PUT requests without content length

https://git.ruby-lang.org/ruby.git/commit/?id=ed12019ce6

From ed12019ce6abe87aac87ec77ac081d37b25180a2 Mon Sep 17 00:00:00 2001
From: Jeremy Evans <code@j...>
Date: Wed, 15 Jul 2020 08:38:44 -0700
Subject: [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

diff --git a/lib/webrick/httprequest.rb b/lib/webrick/httprequest.rb
index c781797..294bd91 100644
--- a/lib/webrick/httprequest.rb
+++ b/lib/webrick/httprequest.rb
@@ -522,7 +522,7 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/httprequest.rb#L522
         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 a594f14..759ccbd 100644
--- a/test/webrick/test_httprequest.rb
+++ b/test/webrick/test_httprequest.rb
@@ -425,6 +425,18 @@ GET / https://github.com/ruby/ruby/blob/trunk/test/webrick/test_httprequest.rb#L425
     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_
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]