Project

General

Profile

Bug #5022

WEBrick returns improper response for malformed HTTP Request

Added by felixalias (Felix Jodoin) over 9 years ago. Updated over 9 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
Backport:
[ruby-core:38040]

Description

=begin

When sending an improper HTTP request in the form of:

GET /\n

(with any valid or invalid HTTP verb), WEBrick returns:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

Internal Server Error

Internal Server Error
undefined method `each' for nil:NilClass


WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18) at
localhost:3000


and then closes the connection, without sending any HTTP status headers or printing a correct '400 Bad Request' error page. This is because the @header variable wasn't set up properly, so @header is nil when a message is passed to it when handling the request. WEBrick's log on the server console will read similar to:

[2011-07-13 00:49:40] ERROR NoMethodError: undefined method each' for nil:NilClass
/Users/x/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httprequest.rb:154:in
each'
/Users/x/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httprequest.rb:231:in meta_vars'
/Users/x/.rvm/gems/ruby-1.9.2-p180/gems/rack-1.3.0/lib/rack/handler/webrick.rb:34:in
service'
/Users/x/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:111:in service'
/Users/x/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:70:in
run'
/Users/x/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'

(Where line 34 of rack/handler/webrick.rb is a simple env = req.meta_vars)

This is reproducible in both 1.8.7 and 1.9.2.

A simple patch is attached to WEBrick's httprequest.rb that will allow the request to continue processing, fixing the 500 internal server error (and let the app decide how to handle the malformed request). In my testing with rack 1.3.0 & sinatra 1.2.6, this patch allowed the request complete normally.

=end


Files

webrick_httprequest_header_fix.patch (323 Bytes) webrick_httprequest_header_fix.patch Patches lib/webrick/httprequest.rb felixalias (Felix Jodoin), 07/13/2011 03:25 PM
webrick_test_httprequest_case.patch (676 Bytes) webrick_test_httprequest_case.patch Test case to show error on req.meta_vars, patches test/webrick/test_httprequest.rb felixalias (Felix Jodoin), 07/13/2011 04:56 PM

Also available in: Atom PDF