Commit graph

19 commits

Author SHA1 Message Date
usa
a45622669b 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 (水, 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 (水, 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 (水, 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 (水, 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 (水, 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 (水, 28 3 2018) | 18 lines

	webrick/httpauth/digestauth: stream req.body

	WARNING! WARNING! WARNING!  LIKELY BROKEN CHANGE

	Pass a proc to WEBrick::HTTPRequest#body to avoid reading a
	potentially large request body into memory during
	authentication.

	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

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@63021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-28 14:47:30 +00:00
usa
89594c0370 merge revision(s) 55731: [Backport #12610]
* lib/webrick/httpservlet/cgihandler.rb (do_GET): delete HTTP_PROXY

	* test/webrick/test_cgi.rb (test_cgi_env): new test

	* test/webrick/webrick.cgi (do_GET): new endpoint to dump env
	  [ruby-core:76511] [Bug #12610]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@55923 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-08-16 04:41:26 +00:00
hsbt
c9134128cb * lib/webrick/httpproxy.rb: remvoe useless assigned variables.
* lib/webrick/httpservlet/cgihandler.rb: ditto.
* lib/webrick/httpservlet/erbhandler.rb: ditto.
* lib/webrick/server.rb: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46560 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-26 09:05:58 +00:00
drbrain
28afe277a8 * lib/webrick/accesslog.rb: Improved WEBrick documentation.
* lib/webrick/cgi.rb:  ditto.
* lib/webrick/config.rb:  ditto.
* lib/webrick/cookie.rb:  ditto.
* lib/webrick/httpauth/authenticator.rb:  ditto.
* lib/webrick/httpauth/basicauth.rb:  ditto.
* lib/webrick/httpauth/digestauth.rb:  ditto.
* lib/webrick/httpproxy.rb:  ditto.
* lib/webrick/httprequest.rb:  ditto.
* lib/webrick/httpresponse.rb:  ditto.
* lib/webrick/https.rb:  ditto.
* lib/webrick/httpserver.rb:  ditto.
* lib/webrick/httpservlet/cgihandler.rb:  ditto.
* lib/webrick/httpservlet/filehandler.rb:  ditto.
* lib/webrick/httpservlet/prochandler.rb:  ditto.
* lib/webrick/httputils.rb:  ditto.
* lib/webrick/httpversion.rb:  ditto.
* lib/webrick/log.rb:  ditto.
* lib/webrick/server.rb:  ditto.
* lib/webrick/ssl.rb:  ditto.
* lib/webrick/utils.rb:  ditto.
* lib/webrick/version.rb:  ditto.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38945 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-01-26 01:12:54 +00:00
naruse
d7cc39658c * lib/webrick/httpservlet/cgihandler.rb
(WEBrick::HTTPServlet::CGIHandler#do_GET):
  set binary mode for tempfile.
  1265467681/286

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26887 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-03-12 08:48:10 +00:00
akr
c0b4e90f08 * tool/mkconfig.rb: generate RbConfig.ruby in rbconfig.rb.
* lib/webrick/httpservlet/cgihandler.rb: use RbConfig.ruby.

* test/ruby/envutil.rb: ditto.

* benchmark/report.rb: ditto.

* benchmark/runc.rb: ditto.

* tool/eval.rb: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26216 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-12-31 15:00:04 +00:00
nobu
287a34ae0d * {ext,lib,test}/**/*.rb: removed trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-03-06 03:56:38 +00:00
matz
877ac7236a * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#do_CONNECT):
use #bytesize instead of #size.  a patch submitted from
  raspberry lemon in  [ruby-core:18571].

* lib/webrick/httpauth/digestauth.rb, lib/webrick/httpproxy.rb,
  lib/webrick/httprequest.rb, lib/webrick/httpservlet/cgi_runner.rb,
  lib/webrick/httpservlet/abstract.rb, lib/webrick/httpresponse.rb,
  lib/webrick/httpservlet/cgihandler.rb, lib/webrick/utils.rb: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20152 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-11-08 09:41:24 +00:00
knu
d27c31e041 * lib/webrick/httpservlet/cgihandler.rb (WEBrick::HTTPServlet::CGIHandler#do_GET):
Set the HTTP status code to 302 if a Location header field is
  present and the status code is not valid as a client
  redirection.  cf. RFC 3875 6.2.3, 6.2.4.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16662 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-05-28 07:13:04 +00:00
gotoyuzo
cc3350f118 * lib/webrick/httpservlet/cgihandler.rb: external encoding of
tempfiles is set to "ASCII-8BIT".


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14936 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-01-07 11:40:41 +00:00
gotoyuzo
6c9d911423 * lib/webrick/httpservley/cgihandler.rb
(WEBrick::HTTPServlet::CGIHandler#do_GET): m17nized.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-12-24 15:30:02 +00:00
akr
04946de81b * mkconfig.rb: generate RbConfig instead of Config.
* instruby.rb, rubytest.rb, runruby.rb, bcc32/Makefile.sub,
  ext/extmk.rb, ext/dl/extconf.rb, ext/iconv/charset_alias.rb,
  lib/mkmf.rb, lib/rdoc/ri/ri_paths.rb,
  lib/webrick/httpservlet/cgihandler.rb,
  test/dbm/test_dbm.rb, test/gdbm/test_gdbm.rb,
  test/ruby/envutil.rb, test/soap/calc/test_calc_cgi.rb,
  test/soap/header/test_authheader_cgi.rb, test/soap/ssl/test_ssl.rb,
  win32/mkexports.rb, win32/resource.rb: Use RbConfig instead of
  Config.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-02-20 08:34:53 +00:00
matz
f816b8b167 * lib/webrick/httpservlet/cgihandler.rb (WEBrick::HTTPServlet::CGIHandler):
qualify the access for Config constant.  [ruby-dev:28338]

* lib/resolv.rb (Resolv::DNS::Resource::IN::A): qualify
  ClassValue.  [ruby-dev:28338]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9962 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2006-02-20 00:15:36 +00:00
gotoyuzo
aa57e68b06 * lib/webrick/httpservlet/cgihandler.rb
(WEBrick::HTTPServlet::CGIHandler#do_GET): the value of Set-Cookie:
  header field should be splited into each cookie.  [ruby-Bugs:2199]

* lib/webrick/cookie.rb (WEBrick::Cookie.parse_set_cookie): new method
  to parse the value of Set-Cookie: header field.

* test/webrick/test_cookie.rb, test/webrick/test_cgi.rb,
  test/webrick/webrick.cgi: add some test for cookie.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9484 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-10-30 20:40:05 +00:00
gotoyuzo
b1e29f011d * lib/webrick/httpproxy.rb (HTTPProxyServer#intialize),
lib/webrick/httpserver.rb (HTTPServer#intialize),
  lib/webrick/httpservlet/cgihandler.rb (CGIHandler#initialize),
  lib/webrick/httpservlet/erbhandler.rb (ERBHandler#initialize),
  lib/webrick/httpservlet/filehandler.rb(DefaultFileHandler#initialize):
  super (called with no arguments) takes default value of optional
  arguments. [ruby-dev:26743]

* lib/webrick/httputils.rb: add a media-type "text/html" for .xhtml.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8943 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-08-07 20:16:15 +00:00
gotoyuzo
4339202266 * lib/webrick/httpservlet/cgihandler.rb
(WEBrick::HTTPServlet::CGIhandler#do_GET): set SystemRoot environment
  variable to CGI process on Windows native platforms. [ruby-dev:23936]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6675 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-07-18 15:59:02 +00:00
gotoyuzo
9b11fc8032 * lib/webrick/config.rb (WEBrick::Config::HTTP): rename :RequestHander
to :RequestCallback and add new option :ServerAlias.

* lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): use
  :RequestCallback and warn if :RequestHandler is in server's option.

* lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): should print
  error message for WEBrick::HTTPSataus::Error.

* lib/webrick/httpserver.rb (WEBrick::HTTPServer#lookup_server):
  lookup for hostname from :ServerAlias if the req.host is not match
  to :ServerName.

* lib/webrick/httpservlet.rb (WEBrick::HTTPServlet::CGIHandler#do_GET):
  use $?.exitstatus and refine log message.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5917 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-03-07 16:06:43 +00:00
gotoyuzo
9cdd5fcb62 * lib/webrick/httpservlet/cgihandler.rb: conform to mswin32.
[ruby-talk:82735], [ruby-talk:82748], [ruby-talk:82818]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4588 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2003-09-23 17:14:39 +00:00
gotoyuzo
01eba908ad * lib/webrick: imported.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4130 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2003-07-23 16:51:36 +00:00