File tree Expand file tree Collapse file tree 3 files changed +26
-3
lines changed Expand file tree Collapse file tree 3 files changed +26
-3
lines changed Original file line number Diff line number Diff line change @@ -318,7 +318,7 @@ def content_type
318318 def []( header_name )
319319 if @header
320320 value = @header [ header_name . downcase ]
321- value . empty? ? nil : value . join ( ", " )
321+ value . empty? ? nil : value . join
322322 end
323323 end
324324
@@ -329,7 +329,7 @@ def each
329329 if @header
330330 @header . each { |k , v |
331331 value = @header [ k ]
332- yield ( k , value . empty? ? nil : value . join ( ", " ) )
332+ yield ( k , value . empty? ? nil : value . join )
333333 }
334334 end
335335 end
Original file line number Diff line number Diff line change @@ -152,6 +152,22 @@ def mime_type(filename, mime_tab)
152152 # Parses an HTTP header +raw+ into a hash of header fields with an Array
153153 # of values.
154154
155+ class SplitHeader < Array
156+ def join ( separator = ", " )
157+ super
158+ end
159+ end
160+
161+ class CookieHeader < Array
162+ def join ( separator = "; " )
163+ super
164+ end
165+ end
166+
167+ HEADER_CLASSES = Hash . new ( SplitHeader ) . update ( {
168+ "cookie" => CookieHeader ,
169+ } )
170+
155171 def parse_header ( raw )
156172 header = Hash . new ( [ ] . freeze )
157173 field = nil
@@ -160,7 +176,7 @@ def parse_header(raw)
160176 when /^([A-Za-z0-9!\# $%&'*+\- .^_`|~]+):(.*?)\z /om
161177 field , value = $1, $2. strip
162178 field . downcase!
163- header [ field ] = [ ] unless header . has_key? ( field )
179+ header [ field ] = HEADER_CLASSES [ field ] . new unless header . has_key? ( field )
164180 header [ field ] << value
165181 when /^\s +(.*?)/om
166182 value = line . strip
Original file line number Diff line number Diff line change @@ -532,4 +532,11 @@ def test_eof_raised_when_line_is_nil
532532 req . parse ( StringIO . new ( "" ) )
533533 }
534534 end
535+
536+ def test_cookie_join
537+ req = WEBrick ::HTTPRequest . new ( WEBrick ::Config ::HTTP )
538+ req . parse ( StringIO . new ( "GET / HTTP/1.1\r \n cookie: a=1\r \n cookie: b=2\r \n \r \n " ) )
539+ assert_equal 2 , req . cookies . length
540+ assert_equal 'a=1; b=2' , req [ 'cookie' ]
541+ end
535542end
You can’t perform that action at this time.
0 commit comments