I see this patch didn't make it to URI-1.19, is it for some reason or
was it just forgotten (I haven't seen any replies)? I'm inlining the
patch against URI-1.19 below.
On Fri, 2002-03-29 at 03:48, Ville Skytt� wrote:
> There seems to be a bug in URI::file (from URI-1.18); the host() is not
> unescaped as the documentation of URI says.
>
> Here's how to reproduce:
>
> $ perl -MURI -e 'print URI->new("file://foo bar/baz/")->host(), "\n"';
> foo%20bar
> $
>
> I'd expect
> foo bar
> ....as the output.
>
> Applying this patch does not break tests, but triggers an
> Use of uninitialized value in substitution (s///) at
> blib/lib/URI/Escape.pm line 161.
> ....with t/old-base.t. Maybe this should be avoided in URI::Escape?
>
> While I was at it, added a $VERSION to URI/file.pm and trimmed some
> trailing whitespace.
--- URI/file.pm.orig Fri Apr 7 15:58:06 2000
+++ URI/file.pm Thu May 9 23:02:45 2002
@@ -1,10 +1,13 @@
package URI::file;
use strict;
-use vars qw(@ISA);
+use vars qw(@ISA $VERSION);
require URI::_generic;
@ISA = qw(URI::_generic);
+$VERSION = sprintf("%d.%02d", q$Revision: 1.00 $ =~ /(\d+)\.(\d+)/);
+
+use URI::Escape qw(uri_unescape);
# Map from $^O values to implementation classes. The Unix
# class is the default.
@@ -33,7 +36,7 @@
}
sub path { shift->path_query(@_) }
-sub host { shift->authority(@_) }
+sub host { uri_unescape(shift->authority(@_)) }
sub new
{
@@ -89,7 +92,7 @@
$u3 = URI::file->new($path);
$u4 = URI::file->new("c:\\windows\\", "win32");
-
+
$u1->file;
$u1->file("mac");
@@ -213,7 +216,7 @@
<undef> <== /
foo/ <== file:/foo%2F
./foo.txt <== file:/.%2Ffoo.txt
-
+
Note that if you want a relative URL, you *must* begin the path with a :. Any
path that begins with [^:] will be treated as absolute.
Cheers,
--
Ville Skytt�
[EMAIL PROTECTED]