Merge branch 'master' into holland
John Napiorkowski [Tue, 6 Jan 2015 23:15:11 +0000 (17:15 -0600)]
Conflicts:
Changes
lib/Catalyst.pm
lib/Catalyst/Runtime.pm

1  2 
Changes
lib/Catalyst/Engine.pm

diff --combined Changes
+++ b/Changes
@@@ -1,85 -1,10 +1,95 @@@
  # This file documents the revision history for Perl extension Catalyst.
  
++TDB
++  - Merged from Stable (5.90079)
++  - reviewed and cleaned up UTF8 related docs
++  - replace missing utf8 pragma in Catalyst::Engine
++
 +5.90079.06  - 2015-01-02
 +  - Removed unneeded depdency on RenderView in new test case that was causing fails
 +    on CPAN testers that did not just happen to have that dependency already installed
 +  - Updated copyright notices to 2015
 +  - Documentation patches around the setup methods and clarification on on security
 +    note posted a few months ago.
 +  - Added my name to the contributors list
 +
 +5.90079_005 - 2014-12-31
 +  - Merged changes from 5.90078
 +  - If configuration 'using_frontend_proxy' is set, we add the correct middleware
 +    to the default middleware list.  This way you get the correct and expected
 +    behavior if you are starting your application via one of the generated scripts
 +    or if you are calling MyApp->psgi_app.  Previously if you started the application
 +    with ->psgi_app (or to_app) we ignored this configuration option
 +  - New configuration option 'using_frontend_proxy_path' which enables
 +    Plack::Middleware::ReverseProxyPath on your application easily.  Please note that
 +    Plack::Middleware::ReverseProxyPath is not an automatic dependency of Catalyst at
 +    this time, so if you want this feature you should add it to your project dependency
 +    list.  This is done to avoid continued growth of Catalyst dependencies.
 +  - Tweaks encoding docs a bit to get closer to final.
 +
 +5.90079_004 - 2014-12-26
 +  - Starting adding some docs around the new encoding stuff
 +  - Exposed the reqexp we use to match content types that need encoding via a
 +    global variable.
 +  - Added some test cases for JSON utf8 and tested file uploads with utf8.
 +  - Fixes to decoding on file upload filenames and related methods
 +  - new methods on upload object that tries to do the right thing if we find
 +    a character set on the upload and its UTF8.
 +  - new additional helper methods on the file upload object.
 +  - new helper methods has_encoding and clear_encoding on context.
 +  - Method on Catalyst::Response to determine if the reponse should be encoded.
 +  - Warn if changing headers only if headers are finalized AND the response callback
 +    has allready been called (and headers already sent).
 +  - Centralized rules about detecting if we need to automatically encode or not and
 +    added tests around cases when you choose to skip auto encoding.
 +
 +5.90079_003 - 2014-12-03
 +  - Make sure all tests run even if debug mode is enabled.
 +  - Fixed issue with middleware stash test case that failed on older Perls
 +
 +5.90079_002 - 2014-12-02
 +  - Fixed typo in Makefile.PL which borked the previous distribution. No other
 +    changes.
 +
 +5.90079_001 - 2014-12-02
 +  - MyApp->to_app is now an alias for MyApp->psgi_app in order to better support
 +    existing Plack conventions.
 +  - Modify Catayst::Response->from_psgi_response to allow the first argument to
 +    be an object that does ->as_psgi.
 +  - Modified Catayst::Middleware::Stash to be a shallow copy in $env.  Added some
 +    docs.  Added a test case to make sure stash keys added in a child application
 +    don't bubble back up to the main application.
 +  - We no longer use Encode::is_utf8 since it doesn't work the way we think it
 +    does... This required some UTF-8 changes.  If your application is UTF-8 aware
 +    I highly suggest you test this release.
 +  - We alway do utf8 decoding on incoming URLs (before we only did so if the server
 +    encoding was utf8.  I believe this is correct as per the w3c spec, but please
 +    correct if incorrect :)
 +  - Debug output now shows utf8 characters if those are incoming via Args or as
 +    path or pathparts in your actions.  query and body parameter keys are now also
 +    subject to utf8 decoding (or as specificed via the encoding configuration value).
 +  - lots of UTF8 changes.  Again we think this is now more correct but please test.
 +  - Allow $c->res->redirect($url) to accept $url as an object that does ->as_string
 +    which I think will ease a common case (and common bug) and added documentation.
 +  - !!! UTF-8 is now the default encoding (there used to be none...).  You can disable
 +    this if you need to with MyApp->config(encoding => undef) if it causes you trouble.
 +  - Calling $c->res->write($data) now encodes $data based on the configured encoding
 +    (UTF-8 is default).
 +  - $c->res->writer_fh now returns Catalyst::Response::Writer which is a decorator
 +    over the PSGI writer and provides an additional methd 'write_encoded' that just
 +    does the right thing for encoding your responses.  This is probably the method
 +    you want to use.
 +  - New dispatch matching attribute: Scheme.  This lets you match a route based on
 +    the incoming URI scheme (http, https, ws, wss).
 +  - If $c->uri_for targets an action or action chain that defines Scheme, use that
 +    scheme for the generated URI object instead of just using whatever the incoming
 +    request uses.
 +
+ 5.90079 - 2015-01-02
+   - Removed dependency from test case that we don't install for testing (
+     rt #101243)
+   - updated year in copyright notices
  5.90078 - 2014-12-30
    - POD corrections (sergey++)
    - New configuration option to disable the HTTP Exception passthru feature
diff --combined lib/Catalyst/Engine.pm
@@@ -7,13 -7,17 +7,14 @@@ use CGI::Simple::Cookie
  use Data::Dump qw/dump/;
  use Errno 'EWOULDBLOCK';
  use HTML::Entities;
 -use HTTP::Body;
  use HTTP::Headers;
 -use URI::QueryParam;
  use Plack::Loader;
  use Catalyst::EngineLoader;
 -use Encode ();
 +use Encode 2.21 'decode_utf8';
  use Plack::Request::Upload;
  use Hash::MultiValue;
 -use utf8;
 -
  use namespace::clean -except => 'meta';
++use utf8;
  
  # Amount of data to read from input on each pass
  our $CHUNKSIZE = 64 * 1024;
@@@ -589,9 -593,7 +590,9 @@@ sub prepare_query_parameters 
      # Check for keywords (no = signs)
      # (yes, index() is faster than a regex :))
      if ( index( $query_string, '=' ) < 0 ) {
 -        $c->request->query_keywords($self->unescape_uri($query_string));
 +        my $keywords = $self->unescape_uri($query_string);
 +        $keywords = decode_utf8 $keywords;
 +        $c->request->query_keywords($keywords);
          return;
      }
  
      for my $item ( @params ) {
  
          my ($param, $value)
 -            = map { $self->unescape_uri($_) }
 +            = map { decode_utf8($self->unescape_uri($_)) }
                split( /=/, $item, 2 );
  
 -        $param = $self->unescape_uri($item) unless defined $param;
 +        unless(defined $param) {
 +            $param = $self->unescape_uri($item);
 +            $param = decode_utf8 $param;
 +        }
  
          if ( exists $query{$param} ) {
              if ( ref $query{$param} ) {
@@@ -669,26 -668,20 +670,26 @@@ sub prepare_uploads 
      my $request = $c->request;
      return unless $request->_body;
  
 +    my $enc = $c->encoding;
      my $uploads = $request->_body->upload;
      my $parameters = $request->parameters;
      foreach my $name (keys %$uploads) {
 +        $name = $c->_handle_unicode_decoding($name) if $enc;
          my $files = $uploads->{$name};
          my @uploads;
          for my $upload (ref $files eq 'ARRAY' ? @$files : ($files)) {
              my $headers = HTTP::Headers->new( %{ $upload->{headers} } );
 +            my $filename = $upload->{filename};
 +            $filename = $c->_handle_unicode_decoding($filename) if $enc;
 +
              my $u = Catalyst::Request::Upload->new
                (
                 size => $upload->{size},
                 type => scalar $headers->content_type,
 +               charset => scalar $headers->content_type_charset,
                 headers => $headers,
                 tempname => $upload->{tempname},
 -               filename => $upload->{filename},
 +               filename => $filename,
                );
              push @uploads, $u;
          }