X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst.pm;h=eaf95819bdcd464e936cf5e335718e5163efc5d2;hb=5c397774465fdb8f734dd7948503c571b2677c79;hp=eaf50796505107af939e11f6a1533b6f1154b1ea;hpb=4a62800defdaa16ec1a5bef88f3e639c983b6f1d;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index eaf5079..eaf9581 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -1802,7 +1802,15 @@ sub execute { if ( my $error = $@ ) { #rethow if this can be handled by middleware - if(blessed $error && ($error->can('as_psgi') || $error->can('code'))) { + if( + blessed $error && ( + $error->can('as_psgi') || + ( + $error->can('code') && + $error->code =~m/^[1-5][0-9][0-9]$/ + ) + ) + ) { foreach my $err (@{$c->error}) { $c->log->error($err); } @@ -2029,7 +2037,10 @@ sub finalize_headers { =head2 $c->finalize_encoding -Make sure your headers and body are encoded properly IF you set an encoding. +Make sure your headers and body are encoded properly IF you set an encoding. By +default the encoding is UTF-8 but you can disable it by explictly setting the +encoding configuration value to undef. + See L. =cut @@ -2129,7 +2140,15 @@ sub handle_request { $status = $c->finalize; } catch { #rethow if this can be handled by middleware - if(blessed $_ && ($_->can('as_psgi') || $_->can('code'))) { + if( + blessed($_) && ( + $_->can('as_psgi') || + ( + $_->can('code') && + $_->code =~m/^[1-5][0-9][0-9]$/ + ) + ) + ) { $_->can('rethrow') ? $_->rethrow : croak $_; } chomp(my $error = $_); @@ -2280,23 +2299,6 @@ Prepares body parameters. sub prepare_body_parameters { my $c = shift; $c->request->prepare_body_parameters( $c, @_ ); - - # If we have an encoding configured (like UTF-8) in general we expect a client - # to POST with the encoding we fufilled the request in. Otherwise don't do any - # encoding (good change wide chars could be in HTML entity style llike the old - # days -JNAP - - # so, now that HTTP::Body prepared the body params, we gotta 'walk' the structure - # and do any needed decoding. - - # This only does something if the encoding is set via the encoding param. Remember - # this is assuming the client is not bad and responds with what you provided. In - # general you can just use utf8 and get away with it. - - if($c->encoding) { - my $current_parameters = $c->request->body_parameters; - $c->request->body_parameters($c->_handle_unicode_decoding($current_parameters)); - } } =head2 $c->prepare_connection @@ -3062,8 +3064,14 @@ Sets up the input/output encoding. See L sub setup_encoding { my $c = shift; - my $enc = delete $c->config->{encoding}; - $c->encoding( $enc ) if defined $enc; + if( exists($c->config->{encoding}) && !defined($c->config->{encoding}) ) { + # Ok, so the user has explicitly said "I don't want encoding..." + return; + } else { + my $enc = defined($c->config->{encoding}) ? + delete $c->config->{encoding} : 'UTF-8'; # not sure why we delete it... (JNAP) + $c->encoding($enc); + } } =head2 handle_unicode_encoding_exception @@ -3619,6 +3627,9 @@ C - See L. C - See L +This now defaults to 'UTF-8'. You my turn it off by setting this configuration +value to undef. + =item * C @@ -3964,6 +3975,9 @@ Please see L for more on middleware. On request, decodes all params from encoding into a sequence of logical characters. On response, encodes body into encoding. +By default encoding is now 'UTF-8'. You may turn it off by setting +the encoding configuration to undef. + =head2 Methods =over 4