prevent encoding plus signs in uri_for args
Luke Saunders [Wed, 10 Jun 2009 21:20:57 +0000 (21:20 +0000)]
Changes
lib/Catalyst.pm
t/unit_core_uri_for.t

diff --git a/Changes b/Changes
index 73321fe..71b8bca 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,8 @@
 # This file documents the revision history for Perl extension Catalyst.
 
+  Bug fixes:
+        - Stop encoding plus signs in uri_for args
+
 5.80005 2009-06-06 14:40:00
 
   Behaviour changes:
index b38be49..a3c022b 100644 (file)
@@ -1192,7 +1192,7 @@ sub uri_for {
       ( scalar @args && ref $args[$#args] eq 'HASH' ? pop @args : {} );
 
     carp "uri_for called with undef argument" if grep { ! defined $_ } @args;
-    s/([^A-Za-z0-9\-_.!~*'()])/$URI::Escape::escapes{$1}/go for @args;
+    s/([^A-Za-z0-9\-_.!~*'()+])/$URI::Escape::escapes{$1}/go for @args;
 
     unshift(@args, $path);
 
index fb5ea1e..f54123e 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 16;
+use Test::More tests => 17;
 use URI;
 
 use_ok('Catalyst');
@@ -51,6 +51,11 @@ is( Catalyst::uri_for( $context, qw/bar wibble?/, 'with space' )->as_string,
     'http://127.0.0.1/foo/yada/bar/wibble%3F/with%20space', 'Space gets encoded'
 );
 
+is(
+    Catalyst::uri_for( $context, '/bar', 'with+plus', { 'also' => 'with+plus' })->as_string,
+    'http://127.0.0.1/foo/bar/with+plus?also=with%2Bplus',
+    'Plus is not encoded'
+);
 
 # test with utf-8
 is(