diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-01-10 09:33:47 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-01-10 09:33:47 +0000 |
commit | 73cd7b6697849b563a0154907b8a61c43e4ba209 (patch) | |
tree | c8889fa5acfcbb8ea726e55c39798dcce16a7741 /test | |
parent | 9982c9298c10395a64429db5d433aae0c893c265 (diff) | |
download | ruby-73cd7b6697849b563a0154907b8a61c43e4ba209.tar.gz |
* lib/webrick/accesslog.rb : Escape needed.
* lib/webrick/httpstatus.rb : ditto.
* lib/webrick/httprequest.rb : ditto.
* lib/webrick/httputils.rb : ditto.
* test/webrick/test_cgi.rb (TestWEBrickCGI::test_bad_): Test for it.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26267 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/webrick/test_cgi.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/webrick/test_cgi.rb b/test/webrick/test_cgi.rb index ff83919902..50affcae91 100644 --- a/test/webrick/test_cgi.rb +++ b/test/webrick/test_cgi.rb @@ -98,4 +98,36 @@ class TestWEBrickCGI < Test::Unit::TestCase end } end + + CtrlSeq = [0x7f, *(1..31)].pack("C*").gsub(/\s+/, '') + CtrlPat = /#{Regexp.quote(CtrlSeq)}/o + DumpPat = /#{Regexp.quote(CtrlSeq.dump[1...-1])}/o + + def test_bad_uri + start_cgi_server{|server, addr, port, log| + res = TCPSocket.open(addr, port) {|sock| + sock << "GET /#{CtrlSeq}#{CRLF}#{CRLF}" + sock.close_write + sock.read + } + assert_match(%r{\AHTTP/\d.\d 400 Bad Request}, res) + s = log.call.each_line.grep(/ERROR bad URI/)[0] + assert_match(DumpPat, s) + assert_not_match(CtrlPat, s) + } + end + + def test_bad_header + start_cgi_server{|server, addr, port, log| + res = TCPSocket.open(addr, port) {|sock| + sock << "GET / HTTP/1.0#{CRLF}#{CtrlSeq}#{CRLF}#{CRLF}" + sock.close_write + sock.read + } + assert_match(%r{\AHTTP/\d.\d 400 Bad Request}, res) + s = log.call.each_line.grep(/ERROR bad header/)[0] + assert_match(DumpPat, s) + assert_not_match(CtrlPat, s) + } + end end |