You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by John ORourke <jo...@o-rourke.org> on 2007/12/05 14:47:07 UTC
mp2/perl bug in substr( lc( $utf8_url ) )
Hi folks,
I appear to have found a bug, possibly in perl's utf8 handling but I
need to create a test to make sure. I have a workaround which is
surprisingly simple, hopefully someone can explain it!
I'm not using the 'mp2bug' template because I have 2 different
architectures, 1 which exhibits the bug and one which does not - they
are described at the bottom.
I'm going to try the obvious solution - upgrading Apache and libapreq to
see if that fixes it, when I have some time.
Anyway here it is: I was doing this in a handler: (abbreviated for
simplicity)
-------------------------------------apache2.conf:
PerlTypeHandler $My::Persistent::Object->type_handler
-------------------------------------My/Persistent/Object.pm:
sub type_handler { # method handler for Type phase, with a persistent
object
my $r=shift;
my $uri=decode_utf8($r->uri());
warn "got uri $uri\n";
my $path=substr(lc($uri),0,2048); # limit ridiculous paths
warn "got path $path";
}
-------------------------------------------------------
After a given process had served a few requests I was seeing this:
got uri /something/here
got path /somethi <--- path truncated to a certain no. of chars
Then it got stranger - it seemed to truncate all URLs sent to that
process to that same no. of chars for the life of the process, and the
no. of chars appeared to be a low but random number - 6, 15 etc!
Clearly by this point I was going slightly insane so these assumptions
may not be entirely
correct.
----------------------------------------------WORKAROUND:
Then even stranger - by replacing this:
my $path = substr( lc( $uri ), 0, 2048 )
with
my $path = lc( $uri );
$path=substr( $path, 0, 2048 );
the problem went away!
Oddly, I have seen this on one setup but not another....
Here is the setup I DID see the problem on:
-------------------------------------------
OS: Ubuntu 6.06.1 LTS
Apache: 2.0.55 prefork mpm, 32-bit
Perl: 5.8.7 (also seen on a similar setup with 5.8.8)
Apache2::Request : 2.07
CGI : 3.10
ExtUtils::MakeMaker: 6.17, 6.38
LWP : 5.803
mod_perl : -
mod_perl2 : 2.000002
-----------------------------------------------
And here is the one I DID NOT see it on:
-----------------------------------------------
Fedora Core 5
Perl 5.8.8
Linux 2.6.9-34.elsmp
Apache 2.2.0 prefork mpm, 32-bit
Apache2::Request : 2.08
CGI : 3.15
ExtUtils::MakeMaker: 6.30
LWP : 5.805
mod_perl : -
mod_perl2 : 2.000002
----------------------------------------------
For now I don't have time to investigate further, having found a
workaround, but I'll post again if I find anything more.
cheers
John