Fixed a CGI header bug
Christian Hansen [Sun, 12 Nov 2006 00:20:38 +0000 (00:20 +0000)]
lib/Catalyst/Engine/HTTP.pm
t/live_engine_request_headers.t

index 808cbca..d94e94e 100644 (file)
@@ -303,7 +303,7 @@ sub _handler {
                 $name = 'HTTP_' . $name
                   unless $name =~ m/\A(?:CONTENT_(?:LENGTH|TYPE)|COOKIE)\z/;
                 if ( exists $ENV{$name} ) {
-                    $ENV{$name} .= "; $value";
+                    $ENV{$name} .= ", $value";
                 }
                 else {
                     $ENV{$name} = $value;
index 325e965..c68d585 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 use FindBin;
 use lib "$FindBin::Bin/lib";
 
-use Test::More tests => 16;
+use Test::More tests => 17;
 use Catalyst::Test 'TestApp';
 
 use Catalyst::Request;
@@ -20,6 +20,7 @@ use URI;
     my $request = GET( 'http://localhost/dump/request', 
         'User-Agent'       => 'MyAgen/1.0',
         'X-Whats-Cool'     => 'Catalyst',
+        'X-Multiple'       => [ 1 .. 5 ],
         'X-Forwarded-Host' => 'frontend.server.com',
         'X-Forwarded-For'  => '192.168.1.1, 1.2.3.4',
     );
@@ -32,6 +33,14 @@ use URI;
     isa_ok( $creq, 'Catalyst::Request' );
     isa_ok( $creq->headers, 'HTTP::Headers', 'Catalyst::Request->headers' );
     is( $creq->header('X-Whats-Cool'), $request->header('X-Whats-Cool'), 'Catalyst::Request->header X-Whats-Cool' );
+    
+    { # Test that multiple headers are joined as per RFC 2616 4.2 and RFC 3875 4.1.18
+
+        my $excpected = '1, 2, 3, 4, 5';
+        
+        is( $creq->header('X-Multiple'), $request->header('X-Multiple'), 'Multiple message-headers are joined as a comma-separated list' );
+    }
+
     is( $creq->header('User-Agent'), $request->header('User-Agent'), 'Catalyst::Request->header User-Agent' );
 
     my $host = sprintf( '%s:%d', $request->uri->host, $request->uri->port );