Hi Gisle,

I'm not sure I'd consider this a bug, bit it did make for some very
noisy web logs.


In URI::_init there's this substitution:

    $str =~ s/([^$uric\#])/$URI::Escape::escapes{$1}/go;


I ended up with some utf8 in a URI and received warnings:

    Use of uninitialized value in substitution iterator
        at /usr/share/perl5/URI.pm at line 75 (or so)


$URI::Escape::escapes is keyed like this:

    for (0..255) {
        $escapes{chr($_)} = sprintf("%%%02X", $_);
    }

But if there's utf8 in the string the substitution will return unicode
characters.

For example, if I hack in some debugging lines into _init:

    warn " [$str] " . (Encode::is_utf8( $str ) ? "is utf8\n" : "is not utf8\n");
    my $x = $str;
    $x =~ s/([^$uric\#])/'[' . ord($1) . ']'/ge;
    warn "x= '$x'\n";
    $str =~ s/([^$uric\#])/$URI::Escape::escapes{$1}/go;

And pass in some random utf-8:


 [Платить] is utf8
x= '[1055][1083][1072][1090][1080][1090][1100]'
Use of uninitialized value in substitution iterator at /usr/share/perl5/URI.pm 
line 80.
Use of uninitialized value in substitution iterator at /usr/share/perl5/URI.pm 
line 80.
Use of uninitialized value in substitution iterator at /usr/share/perl5/URI.pm 
line 80.
Use of uninitialized value in substitution iterator at /usr/share/perl5/URI.pm 
line 80.
Use of uninitialized value in substitution iterator at /usr/share/perl5/URI.pm 
line 80.
Use of uninitialized value in substitution iterator at /usr/share/perl5/URI.pm 
line 80.
Use of uninitialized value in substitution iterator at /usr/share/perl5/URI.pm 
line 80.



-- 
Bill Moseley
[EMAIL PROTECTED]

Reply via email to