hello.
method initialize_http_header() of the Net::HTTP::HTTPHeader doesn’t
check the type of the ‘value’, and crashes with exception:
—8<—
/usr/lib/ruby/1.8/net/http.rb:1142:in initialize_http_header': undefined method strip’ for 1.43:Float (NoMethodError)
from /usr/lib/ruby/1.8/net/http.rb:1140:in each' from /usr/lib/ruby/1.8/net/http.rb:1140:in initialize_http_header’
from /usr/lib/ruby/1.8/net/http.rb:1472:in initialize' from /usr/lib/ruby/1.8/net/http.rb:1588:in initialize’
from /usr/lib/ruby/1.8/net/http.rb:845:in new' from /usr/lib/ruby/1.8/net/http.rb:845:in post’
—>8—
I think, we need to cast any ‘value’ to String in the
initialize_http_header()
—8<—
def initialize_http_header(initheader)
@header = {}
return unless initheader
initheader.each do |key, value|
warn “net/http: warning: duplicated HTTP header: #{key}” if
key?(key) and $VERBOSE
@header[key.downcase] = [value.strip]
end
end
—>8—
Maybe, we should use ‘value.to_s.strip’ instead of ‘value.strip’?
How to reproduce this bug:
—8<—
#!/usr/bin/env ruby
resolve any URI
require ‘uri’
url = URI.parse(“http://paste.org.ru/”) # put your favourite site
here!
define the data
data = ‘data=oops’
prepare the request
require ‘net/http’
http = Net::HTTP.new(url.host, url.port)
headers = {
‘Content-Length’ => data.size
}
resp = http.post(url.path, data, headers)
—>8—
My system is:
Fedora 8 (Werewolf) i386, ruby 1.8.6