From b86eebfdb789aa44105b67aeb33164cc695f6497 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 7 Jun 2024 13:13:29 +0900 Subject: [PATCH] Potential fix. --- lib/webrick/httprequest.rb | 4 ++-- lib/webrick/httputils.rb | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/webrick/httprequest.rb b/lib/webrick/httprequest.rb index c422c737..80b01e95 100644 --- a/lib/webrick/httprequest.rb +++ b/lib/webrick/httprequest.rb @@ -318,7 +318,7 @@ def content_type def [](header_name) if @header value = @header[header_name.downcase] - value.empty? ? nil : value.join(", ") + value.empty? ? nil : value.join end end @@ -329,7 +329,7 @@ def each if @header @header.each{|k, v| value = @header[k] - yield(k, value.empty? ? nil : value.join(", ")) + yield(k, value.empty? ? nil : value.join) } end end diff --git a/lib/webrick/httputils.rb b/lib/webrick/httputils.rb index 6b43146e..1653a072 100644 --- a/lib/webrick/httputils.rb +++ b/lib/webrick/httputils.rb @@ -152,6 +152,22 @@ def mime_type(filename, mime_tab) # Parses an HTTP header +raw+ into a hash of header fields with an Array # of values. + class SplitHeader < Array + def join(separator = ", ") + super + end + end + + class CookieHeader < Array + def join(separator = "; ") + super + end + end + + HEADER_CLASSES = Hash.new(SplitHeader).update({ + "cookie" => CookieHeader, + }) + def parse_header(raw) header = Hash.new([].freeze) field = nil @@ -160,7 +176,7 @@ def parse_header(raw) when /^([A-Za-z0-9!\#$%&'*+\-.^_`|~]+):(.*?)\z/om field, value = $1, $2.strip field.downcase! - header[field] = [] unless header.has_key?(field) + header[field] = HEADER_CLASSES[field].new unless header.has_key?(field) header[field] << value when /^\s+(.*?)/om value = line.strip