[ruby-cvs:70114] usa:r63021 (ruby_2_2): merge revision(s) 62960-62965:

usa at ruby-lang.org usa at ruby-lang.org
Wed Mar 28 23:47:31 JST 2018

usa	2018-03-28 23:47:30 +0900 (Wed, 28 Mar 2018)

  New Revision: 63021


    merge revision(s) 62960-62965:
    webrick: use IO.copy_stream for multipart response
    Use the new Proc response body feature to generate a multipart
    range response dynamically.  We use a flat array to minimize
    object overhead as much as possible; as many ranges may fit
    into an HTTP request header.
    * lib/webrick/httpservlet/filehandler.rb (multipart_body): new method
      (make_partial_content): use multipart_body
    r62960 | normal | 2018-03-28 17:06:23 +0900 (?\230?\176?\180, 28 3 2018) | 13 lines
    webrick/httprequest: limit request headers size
    We use the same 112 KB limit started (AFAIK) by Mongrel, Thin,
    and Puma to prevent malicious users from using up all the memory
    with a single request.  This also limits the damage done by
    excessive ranges in multipart Range: requests.
    Due to the way we rely on IO#gets and the desire to keep
    the code simple, the actual maximum header may be 4093 bytes
    larger than 112 KB, but we're splitting hairs at that point.
    * lib/webrick/httprequest.rb: define MAX_HEADER_LENGTH
      (read_header): raise when headers exceed max length
    r62961 | normal | 2018-03-28 17:06:28 +0900 (?\230?\176?\180, 28 3 2018) | 9 lines
    webrick/httpservlet/cgihandler: reduce memory use
    WEBrick::HTTPRequest#body can be passed a block to process the
    body in chunks.  Use this feature to avoid building a giant
    string in memory.
    * lib/webrick/httpservlet/cgihandler.rb (do_GET):
      avoid reading entire request body into memory
      (do_POST is aliased to do_GET, so it handles bodies)
    r62962 | normal | 2018-03-28 17:06:34 +0900 (?\230?\176?\180, 28 3 2018) | 7 lines
    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
    r62963 | normal | 2018-03-28 17:06:39 +0900 (?\230?\176?\180, 28 3 2018) | 9 lines
    webrick/httprequest: use InputBufferSize for chunked requests
    While WEBrick::HTTPRequest#body provides a Proc interface
    for streaming large request bodies, clients must not force
    the server to use an excessively large chunk size.
    * lib/webrick/httprequest.rb (read_chunk_size): limit each
      read and block.call to :InputBufferSize in config.
    * test/webrick/test_httpserver.rb (test_big_chunks): new test
    r62964 | normal | 2018-03-28 17:06:44 +0900 (?\230?\176?\180, 28 3 2018) | 9 lines
    webrick: add test for Digest auth-int
    No changes to the actual code, this is a new test for
    a feature for which no tests existed.  I don't understand
    the Digest authentication code well at all, but this is
    necessary for the subsequent change.
    * test/webrick/test_httpauth.rb (test_digest_auth_int): new test
      (credentials_for_request): support bodies with POST
    r62965 | normal | 2018-03-28 17:06:49 +0900 (?\230?\176?\180, 28 3 2018) | 18 lines
    webrick/httpauth/digestauth: stream req.body
    Pass a proc to WEBrick::HTTPRequest#body to avoid reading a
    potentially large request body into memory during
    WARNING! this will break apps completely which want to do
    something with the body besides calculating the MD5 digest
    of it.
    Also, keep in mind that probably nobody uses "auth-int".
    Servers such as Apache, lighttpd, nginx don't seem to
    support it; nor does curl when using POST/PUT bodies;
    and we didn't have tests for it until now...
    * lib/webrick/httpauth/digestauth.rb (_authenticate): stream req.body

  Modified directories:
  Modified files:

More information about the ruby-cvs mailing list