X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine.pm;h=6935c37cfd2d0bcb1e3306b61b8b9ed8d246e4e3;hb=059c085bfcead450e70ace9ef193aa99ac2ab37d;hp=347f78181c31aeab3cff9100588f0ad8320b077d;hpb=e512dd249ef1911d256f91f39ea5beaad85f73a9;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index 347f781..6935c37 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -458,7 +458,7 @@ sub prepare_query_parameters { my ($param, $value) = map { $self->unescape_uri($_) } - split( /=/, $item ); + split( /=/, $item, 2 ); $param = $self->unescape_uri($item) unless defined $param; @@ -625,6 +625,11 @@ sub write { my $len = length($buffer); my $wrote = syswrite STDOUT, $buffer; + if ( !defined $wrote && $! == EWOULDBLOCK ) { + # Unable to write on the first try, will retry in the loop below + $wrote = 0; + } + if ( defined $wrote && $wrote < $len ) { # We didn't write the whole buffer while (1) { @@ -653,10 +658,9 @@ as Apache may implement this using Apache's C-based modules, for example. sub unescape_uri { my ( $self, $str ) = @_; - - $str =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; - $str =~ s/\+/ /g; - + + $str =~ s/(?:%([0-9A-Fa-f]{2})|\+)/defined $1 ? chr(hex($1)) : ' '/eg; + return $str; }