X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=ea96adc2ee0842ead33d538d9e35a24bfd90e4d1;hp=154b3d4ed44f6e7dcba8c3b6bda33393f6fc7fa3;hb=d86c0bd4acc04426e8fb3014772b9d469545cbb7;hpb=f6ddb2f242a1635b4a5ba848f61d87c1093422dc diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 154b3d4..ea96adc 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -51,6 +51,7 @@ use Catalyst::Middleware::Stash; use Plack::Util; use Class::Load 'load_class'; use Encode 2.21 'decode_utf8', 'encode_utf8'; +use Scalar::Util; BEGIN { require 5.008003; } @@ -204,7 +205,7 @@ sub composed_stats_class { __PACKAGE__->_encode_check(Encode::FB_CROAK | Encode::LEAVE_SRC); # Remember to update this in Catalyst::Runtime as well! -our $VERSION = '5.90106'; +our $VERSION = '5.90113'; $VERSION = eval $VERSION if $VERSION =~ /_/; # numify for warning-free dev releases sub import { @@ -2490,6 +2491,8 @@ sub prepare { }; $c->log_request; + $c->{stash} = $c->stash; + Scalar::Util::weaken($c->{stash}); return $c; } @@ -3571,17 +3574,18 @@ sub setup_encoding { =head2 handle_unicode_encoding_exception -Hook to let you customize how encoding errors are handled. By default +Hook to let you customize how encoding errors are handled. By default we just throw an exception and the default error page will pick it up. -Receives a hashref of debug information. Example of call: +Receives a hashref of debug information. Example of call (from the +Catalyst internals): - $c->handle_unicode_encoding_exception({ + my $decoded_after_fail = $c->handle_unicode_encoding_exception({ param_value => $value, error_msg => $_, encoding_step => 'params', - }); + }); -It expects to receive a decoded string. +The calling code expects to receive a decoded string or an exception. You can override this for custom handling of unicode errors. By default we just die. If you want a custom response here, one approach @@ -3653,6 +3657,9 @@ sub _handle_param_unicode_decoding { return $value if blessed($value); #don't decode when the value is an object. my $enc = $self->encoding; + + return $value unless $enc; # don't decode if no encoding is specified + $check ||= $self->_encode_check; return try { $enc->decode( $value, $check);