Bug #15394 ยป 0001-Preserve-HTTP-header-key-as-string.patch
lib/net/http/header.rb | ||
---|---|---|
if value.count("\r\n") > 0
|
||
raise ArgumentError, "header #{key} has field value #{value.inspect}, this cannot include CR/LF"
|
||
end
|
||
@header[key.downcase] = [value]
|
||
@header[key.to_s.downcase] = [value]
|
||
end
|
||
end
|
||
end
|
||
... | ... | |
# Returns the header field corresponding to the case-insensitive key.
|
||
# For example, a key of "Content-Type" might return "text/html"
|
||
def [](key)
|
||
a = @header[key.downcase] or return nil
|
||
a = @header[key.to_s.downcase] or return nil
|
||
a.join(', ')
|
||
end
|
||
# Sets the header field corresponding to the case-insensitive key.
|
||
def []=(key, val)
|
||
unless val
|
||
@header.delete key.downcase
|
||
@header.delete key.to_s.downcase
|
||
return val
|
||
end
|
||
set_field(key, val)
|
||
... | ... | |
# p request.get_fields('X-My-Header') #=> ["a", "b", "c"]
|
||
#
|
||
def add_field(key, val)
|
||
if @header.key?(key.downcase)
|
||
append_field_value(@header[key.downcase], val)
|
||
stringified_downcased_key = key.to_s.downcase
|
||
if @header.key?(stringified_downcased_key)
|
||
append_field_value(@header[stringified_downcased_key], val)
|
||
else
|
||
set_field(key, val)
|
||
end
|
||
... | ... | |
when Enumerable
|
||
ary = []
|
||
append_field_value(ary, val)
|
||
@header[key.downcase] = ary
|
||
@header[key.to_s.downcase] = ary
|
||
else
|
||
val = val.to_s # for compatibility use to_s instead of to_str
|
||
if val.b.count("\r\n") > 0
|
||
raise ArgumentError, 'header field value cannot include CR/LF'
|
||
end
|
||
@header[key.downcase] = [val]
|
||
@header[key.to_s.downcase] = [val]
|
||
end
|
||
end
|
||
... | ... | |
# #=> "session=al98axx; expires=Fri, 31-Dec-1999 23:58:23, query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"
|
||
#
|
||
def get_fields(key)
|
||
return nil unless @header[key.downcase]
|
||
@header[key.downcase].dup
|
||
stringified_downcased_key = key.to_s.downcase
|
||
return nil unless @header[stringified_downcased_key]
|
||
@header[stringified_downcased_key].dup
|
||
end
|
||
# Returns the header field corresponding to the case-insensitive key.
|
||
... | ... | |
# raises an IndexError if there's no header field named +key+
|
||
# See Hash#fetch
|
||
def fetch(key, *args, &block) #:yield: +key+
|
||
a = @header.fetch(key.downcase, *args, &block)
|
||
a = @header.fetch(key.to_s.downcase, *args, &block)
|
||
a.kind_of?(Array) ? a.join(', ') : a
|
||
end
|
||
... | ... | |
# Removes a header field, specified by case-insensitive key.
|
||
def delete(key)
|
||
@header.delete(key.downcase)
|
||
@header.delete(key.to_s.downcase)
|
||
end
|
||
# true if +key+ header exists.
|
||
def key?(key)
|
||
@header.key?(key.downcase)
|
||
@header.key?(key.to_s.downcase)
|
||
end
|
||
# Returns a Hash consisting of header names and array of values.
|
test/net/http/test_httpheader.rb | ||
---|---|---|
assert_raise(ArgumentError){ @c.initialize_http_header("foo"=>"a\xff") }
|
||
end
|
||
def test_initialize_with_symbol
|
||
@c.initialize_http_header(foo: "abc")
|
||
assert_equal "abc", @c["foo"]
|
||
end
|
||
def test_size
|
||
assert_equal 0, @c.size
|
||
@c['a'] = 'a'
|