Hello community,

here is the log from the commit of package perl-Plack for openSUSE:Factory 
checked in at 2015-04-15 16:23:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Plack (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Plack.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Plack"

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Plack/perl-Plack.changes    2014-09-17 
17:26:34.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-Plack.new/perl-Plack.changes       
2015-04-15 16:23:23.000000000 +0200
@@ -1,0 +2,28 @@
+Mon Apr 13 18:36:02 UTC 2015 - [email protected]
+
+- updated to 1.0034
+   see /usr/share/doc/packages/perl-Plack/Changes
+
+  1.0034  2015-02-02 21:42:42 CET
+      [SECURITY]
+          - Fixed a possible directory traversal with Plack::App::File on 
Win32 (sri)
+  
+      [IMPROVEMENTS]
+          - Documentation improvements (timbunce, oalders, autarch, frioux)
+          - Avoid warnings in Plack::App::WrapCGI (frioux)
+  
+  1.0033  2014-10-23 12:33:18 PDT
+      [BUG FIXES]
+          - Lint: Fix error messages (fgabolde) #473
+          - ErrorDocument: Reverse the $done filtering (nwellnhof) #474
+  
+      [IMPROVEMENTS]
+          - StackTrace: Improve the accuracy of thrown exceptions in case 
where an excpetion
+            is thrown in destructors (nwellnhof) #476
+  
+  1.0032  2014-10-04 11:13:24 PDT
+      [IMPROVEMENTS]
+          - Support Server::Starter in FCGI handler (yuryu) #435
+          - Various documentation fixes
+
+-------------------------------------------------------------------

Old:
----
  Plack-1.0031.tar.gz

New:
----
  Plack-1.0034.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Plack.spec ++++++
--- /var/tmp/diff_new_pack.qgf5g6/_old  2015-04-15 16:23:24.000000000 +0200
+++ /var/tmp/diff_new_pack.qgf5g6/_new  2015-04-15 16:23:24.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Plack
 #
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           perl-Plack
-Version:        1.0031
+Version:        1.0034
 Release:        0
 %define cpan_name Plack
 Summary:        Perl Superglue for Web frameworks and Web Servers (PSGI 
toolkit)
@@ -90,6 +90,6 @@
 
 %files -f %{name}.files
 %defattr(-,root,root,755)
-%doc Changes cpanfile LICENSE README
+%doc Changes LICENSE README
 
 %changelog

++++++ Plack-1.0031.tar.gz -> Plack-1.0034.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/Changes new/Plack-1.0034/Changes
--- old/Plack-1.0031/Changes    2014-08-01 22:19:17.000000000 +0200
+++ new/Plack-1.0034/Changes    2015-02-02 21:42:46.000000000 +0100
@@ -1,5 +1,27 @@
 Go to http://github.com/plack/Plack/issues for the roadmap and known issues.
 
+1.0034  2015-02-02 21:42:42 CET
+    [SECURITY]
+        - Fixed a possible directory traversal with Plack::App::File on Win32 
(sri)
+
+    [IMPROVEMENTS]
+        - Documentation improvements (timbunce, oalders, autarch, frioux)
+        - Avoid warnings in Plack::App::WrapCGI (frioux)
+
+1.0033  2014-10-23 12:33:18 PDT
+    [BUG FIXES]
+        - Lint: Fix error messages (fgabolde) #473
+        - ErrorDocument: Reverse the $done filtering (nwellnhof) #474
+
+    [IMPROVEMENTS]
+        - StackTrace: Improve the accuracy of thrown exceptions in case where 
an excpetion
+          is thrown in destructors (nwellnhof) #476
+
+1.0032  2014-10-04 11:13:24 PDT
+    [IMPROVEMENTS]
+        - Support Server::Starter in FCGI handler (yuryu) #435
+        - Various documentation fixes
+
 1.0031  2014-08-01 13:19:14 PDT
     [SECURITY]
         - Plack::App::File would previously strip trailing slashes off
@@ -62,7 +84,7 @@
 1.0025  2013-06-12 13:08:58 PDT
     [INCOMPATIBLE CHANGES]
         - No XS! Eliminates dependency to LWP::UserAgent by making it 
completely optional for
-          testing. If you run Plack::Test with Server implemenetation or run 
Plack::Test::Suite
+          testing. If you run Plack::Test with Server implementation or run 
Plack::Test::Suite
           (for PSGI handlers) without LWP installed, the tests will 
automatically be skipped.
           This removes the eventual sub-dependency to HTML::Parser, which is 
the only XS dependency
           in Plack. #408
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/MANIFEST new/Plack-1.0034/MANIFEST
--- old/Plack-1.0031/MANIFEST   2014-08-01 22:19:17.000000000 +0200
+++ new/Plack-1.0034/MANIFEST   2015-02-02 21:42:46.000000000 +0100
@@ -1,4 +1,4 @@
-# This file was automatically generated by Dist::Zilla::Plugin::Manifest 
v5.020.
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest 
v5.031.
 Changes
 LICENSE
 MANIFEST
@@ -190,6 +190,7 @@
 t/Plack-Middleware/simple_logger.t
 t/Plack-Middleware/stacktrace/basic.t
 t/Plack-Middleware/stacktrace/force.t
+t/Plack-Middleware/stacktrace/multiple_exceptions.t
 t/Plack-Middleware/stacktrace/sigdie.t
 t/Plack-Middleware/stacktrace/streaming.t
 t/Plack-Middleware/stacktrace/utf8.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/META.json new/Plack-1.0034/META.json
--- old/Plack-1.0031/META.json  2014-08-01 22:19:17.000000000 +0200
+++ new/Plack-1.0034/META.json  2015-02-02 21:42:46.000000000 +0100
@@ -4,13 +4,13 @@
       "Tatsuhiko Miyagawa"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Milla version v1.0.5, Dist::Zilla version 5.020, 
CPAN::Meta::Converter version 2.142060",
+   "generated_by" : "Dist::Zilla version 5.031, Dist::Milla version v1.0.14, 
CPAN::Meta::Converter version 2.143240",
    "license" : [
       "perl_5"
    ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec";,
-      "version" : "2"
+      "version" : 2
    },
    "name" : "Plack",
    "no_index" : {
@@ -32,6 +32,7 @@
       },
       "develop" : {
          "requires" : {
+            "Dist::Milla" : "v1.0.14",
             "Test::Pod" : "1.41"
          }
       },
@@ -95,35 +96,48 @@
          "web" : "https://github.com/plack/Plack";
       }
    },
-   "version" : "1.0031",
+   "version" : "1.0034",
    "x_authority" : "cpan:MIYAGAWA",
    "x_contributors" : [
       "Aaron Trevena <[email protected]>",
-      "Alex J. G. Burzyński <[email protected]>",
+      "Ævar Arnfjörð Bjarmason <[email protected]>",
       "Alexandr Ciornii <[email protected]>",
+      "Alex J. G. Burzyński <[email protected]>",
       "Andrew Rodland <[email protected]>",
       "Andy Wardley <[email protected]>",
       "Aristotle Pagaltzis <[email protected]>",
       "Arthur Axel 'fREW' Schmidt <[email protected]>",
+      "Ashley Pond V <[email protected]>",
       "Ask Bjørn Hansen <[email protected]>",
       "Ben Morrow <[email protected]>",
       "Bernhard Graf <[email protected]>",
       "Chad Granum <[email protected]>",
+      "chansen <[email protected]>",
       "Chia-liang Kao <[email protected]>",
+      "cho45 <[email protected]>",
       "Christian Walde <[email protected]>",
+      "chromatic <[email protected]>",
       "Cosimo Streppone <[email protected]>",
       "Daisuke Maki <[email protected]>",
       "Daisuke Murase <[email protected]>",
+      "Dave Marr <[email protected]>",
       "Dave Rolsky <[email protected]>",
       "David E. Wheeler <[email protected]>",
       "David Steinbrunner <[email protected]>",
       "Eduardo Arino de la Rubia <[email protected]>",
+      "Eric Johnson <[email protected]>",
+      "Fabrice Gabolde <[email protected]>",
+      "fayland <[email protected]>",
       "Florian Ragwitz <[email protected]>",
+      "franck cuny <[email protected]>",
+      "fREW Schmidt <[email protected]>",
       "Graham Knop <[email protected]>",
       "Grant McLean <[email protected]>",
-      "HIROSE Masaaki <[email protected]>",
       "Hans Dieter Pearcey <[email protected]>",
+      "Haruka Iwao <[email protected]>",
       "Henry Baragar <[email protected]>",
+      "hiratara <[email protected]>",
+      "HIROSE Masaaki <[email protected]>",
       "Hiroshi Sakai <[email protected]>",
       "Jakob Voss <[email protected]>",
       "Jakob Voss <[email protected]>",
@@ -135,12 +149,15 @@
       "John Napiorkowski <[email protected]>",
       "Jonathan Swartz <[email protected]>",
       "Justin Davis <[email protected]>",
+      "kakuno <[email protected]>",
       "Kang-min Liu <[email protected]>",
       "Karen Etheridge <[email protected]>",
       "Kazuho Oku <[email protected]>",
       "Keedi Kim <[email protected]>",
       "Lee Aylward <[email protected]>",
+      "leedo <[email protected]>",
       "Leo Lapworth <[email protected]>",
+      "mala <[email protected]>",
       "Marian Schubert <[email protected]>",
       "Mark Fowler <[email protected]>",
       "Mark Stosberg <[email protected]>",
@@ -153,12 +170,14 @@
       "Oliver Gorwits <[email protected]>",
       "Oliver Paukstadt <[email protected]>",
       "Olivier Mengué <[email protected]>",
+      "osfameron <[email protected]>",
       "Panu Ervamaa <[email protected]>",
       "Paul Driver <[email protected]>",
       "Pedro Melo <[email protected]>",
       "Peter Flanigan <[email protected]>",
       "Peter Makholm <[email protected]>",
       "Piotr Roszatycki <[email protected]>",
+      "punytan <[email protected]>",
       "Rafael Kitover <[email protected]>",
       "Randy Stauner <[email protected]>",
       "Ray Miller <[email protected]>",
@@ -172,29 +191,18 @@
       "Stevan Little <[email protected]>",
       "Stuart A Johnston <[email protected]>",
       "Takeshi OKURA <[email protected]>",
+      "Tatsuhiko Miyagawa <[email protected]>",
+      "Tim Bunce <[email protected]>",
       "Tokuhiro Matsuno <[email protected]>",
-      "Tom Heady <[email protected]>",
       "Tomas Doran <[email protected]>",
+      "Tom Heady <[email protected]>",
+      "vti <[email protected]>",
       "Wallace Reis <[email protected]>",
+      "xaicron <[email protected]>",
       "Yann Kerherve <[email protected]>",
+      "yappo <[email protected]>",
       "Yury Zavarin <[email protected]>",
       "Yuval Kogman <[email protected]>",
-      "chansen <[email protected]>",
-      "cho45 <[email protected]>",
-      "chromatic <[email protected]>",
-      "fREW Schmidt <[email protected]>",
-      "fayland <[email protected]>",
-      "franck cuny <[email protected]>",
-      "hiratara <[email protected]>",
-      "kakuno <[email protected]>",
-      "leedo <[email protected]>",
-      "mala <[email protected]>",
-      "osfameron <[email protected]>",
-      "punytan <[email protected]>",
-      "vti <[email protected]>",
-      "xaicron <[email protected]>",
-      "yappo <[email protected]>",
-      "Ævar Arnfjörð Bjarmason <[email protected]>",
       "唐鳳 <[email protected]>"
    ]
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/META.yml new/Plack-1.0034/META.yml
--- old/Plack-1.0031/META.yml   2014-08-01 22:19:17.000000000 +0200
+++ new/Plack-1.0034/META.yml   2015-02-02 21:42:46.000000000 +0100
@@ -9,7 +9,7 @@
   ExtUtils::MakeMaker: '0'
   File::ShareDir::Install: '0.06'
 dynamic_config: 0
-generated_by: 'Dist::Milla version v1.0.5, Dist::Zilla version 5.020, 
CPAN::Meta::Converter version 2.142060'
+generated_by: 'Dist::Zilla version 5.031, Dist::Milla version v1.0.14, 
CPAN::Meta::Converter version 2.143240'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -44,35 +44,48 @@
   bugtracker: https://github.com/plack/Plack/issues
   homepage: https://github.com/plack/Plack
   repository: https://github.com/plack/Plack.git
-version: '1.0031'
+version: '1.0034'
 x_authority: cpan:MIYAGAWA
 x_contributors:
   - 'Aaron Trevena <[email protected]>'
-  - 'Alex J. G. Burzyński <[email protected]>'
+  - 'Ævar Arnfjörð Bjarmason <[email protected]>'
   - 'Alexandr Ciornii <[email protected]>'
+  - 'Alex J. G. Burzyński <[email protected]>'
   - 'Andrew Rodland <[email protected]>'
   - 'Andy Wardley <[email protected]>'
   - 'Aristotle Pagaltzis <[email protected]>'
   - "Arthur Axel 'fREW' Schmidt <[email protected]>"
+  - 'Ashley Pond V <[email protected]>'
   - 'Ask Bjørn Hansen <[email protected]>'
   - 'Ben Morrow <[email protected]>'
   - 'Bernhard Graf <[email protected]>'
   - 'Chad Granum <[email protected]>'
+  - 'chansen <[email protected]>'
   - 'Chia-liang Kao <[email protected]>'
+  - 'cho45 <[email protected]>'
   - 'Christian Walde <[email protected]>'
+  - 'chromatic <[email protected]>'
   - 'Cosimo Streppone <[email protected]>'
   - 'Daisuke Maki <[email protected]>'
   - 'Daisuke Murase <[email protected]>'
+  - 'Dave Marr <[email protected]>'
   - 'Dave Rolsky <[email protected]>'
   - 'David E. Wheeler <[email protected]>'
   - 'David Steinbrunner <[email protected]>'
   - 'Eduardo Arino de la Rubia <[email protected]>'
+  - 'Eric Johnson <[email protected]>'
+  - 'Fabrice Gabolde <[email protected]>'
+  - 'fayland <[email protected]>'
   - 'Florian Ragwitz <[email protected]>'
+  - 'franck cuny <[email protected]>'
+  - 'fREW Schmidt <[email protected]>'
   - 'Graham Knop <[email protected]>'
   - 'Grant McLean <[email protected]>'
-  - 'HIROSE Masaaki <[email protected]>'
   - 'Hans Dieter Pearcey <[email protected]>'
+  - 'Haruka Iwao <[email protected]>'
   - 'Henry Baragar <[email protected]>'
+  - 'hiratara <[email protected]>'
+  - 'HIROSE Masaaki <[email protected]>'
   - 'Hiroshi Sakai <[email protected]>'
   - 'Jakob Voss <[email protected]>'
   - 'Jakob Voss <[email protected]>'
@@ -84,12 +97,15 @@
   - 'John Napiorkowski <[email protected]>'
   - 'Jonathan Swartz <[email protected]>'
   - 'Justin Davis <[email protected]>'
+  - 'kakuno <[email protected]>'
   - 'Kang-min Liu <[email protected]>'
   - 'Karen Etheridge <[email protected]>'
   - 'Kazuho Oku <[email protected]>'
   - 'Keedi Kim <[email protected]>'
   - 'Lee Aylward <[email protected]>'
+  - 'leedo <[email protected]>'
   - 'Leo Lapworth <[email protected]>'
+  - 'mala <[email protected]>'
   - 'Marian Schubert <[email protected]>'
   - 'Mark Fowler <[email protected]>'
   - 'Mark Stosberg <[email protected]>'
@@ -102,12 +118,14 @@
   - 'Oliver Gorwits <[email protected]>'
   - 'Oliver Paukstadt <[email protected]>'
   - 'Olivier Mengué <[email protected]>'
+  - 'osfameron <[email protected]>'
   - 'Panu Ervamaa <[email protected]>'
   - 'Paul Driver <[email protected]>'
   - 'Pedro Melo <[email protected]>'
   - 'Peter Flanigan <[email protected]>'
   - 'Peter Makholm <[email protected]>'
   - 'Piotr Roszatycki <[email protected]>'
+  - 'punytan <[email protected]>'
   - 'Rafael Kitover <[email protected]>'
   - 'Randy Stauner <[email protected]>'
   - 'Ray Miller <[email protected]>'
@@ -121,27 +139,16 @@
   - 'Stevan Little <[email protected]>'
   - 'Stuart A Johnston <[email protected]>'
   - 'Takeshi OKURA <[email protected]>'
+  - 'Tatsuhiko Miyagawa <[email protected]>'
+  - 'Tim Bunce <[email protected]>'
   - 'Tokuhiro Matsuno <[email protected]>'
-  - 'Tom Heady <[email protected]>'
   - 'Tomas Doran <[email protected]>'
+  - 'Tom Heady <[email protected]>'
+  - 'vti <[email protected]>'
   - 'Wallace Reis <[email protected]>'
+  - 'xaicron <[email protected]>'
   - 'Yann Kerherve <[email protected]>'
+  - 'yappo <[email protected]>'
   - 'Yury Zavarin <[email protected]>'
   - 'Yuval Kogman <[email protected]>'
-  - 'chansen <[email protected]>'
-  - 'cho45 <[email protected]>'
-  - 'chromatic <[email protected]>'
-  - 'fREW Schmidt <[email protected]>'
-  - 'fayland <[email protected]>'
-  - 'franck cuny <[email protected]>'
-  - 'hiratara <[email protected]>'
-  - 'kakuno <[email protected]>'
-  - 'leedo <[email protected]>'
-  - 'mala <[email protected]>'
-  - 'osfameron <[email protected]>'
-  - 'punytan <[email protected]>'
-  - 'vti <[email protected]>'
-  - 'xaicron <[email protected]>'
-  - 'yappo <[email protected]>'
-  - 'Ævar Arnfjörð Bjarmason <[email protected]>'
   - '唐鳳 <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/Makefile.PL new/Plack-1.0034/Makefile.PL
--- old/Plack-1.0031/Makefile.PL        2014-08-01 22:19:17.000000000 +0200
+++ new/Plack-1.0034/Makefile.PL        2015-02-02 21:42:46.000000000 +0100
@@ -1,11 +1,11 @@
 
-# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker 
v5.020.
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker 
v5.031.
 use strict;
 use warnings;
 
 use 5.008001;
 
-use ExtUtils::MakeMaker ;
+use ExtUtils::MakeMaker;
 
 use File::ShareDir::Install;
 $File::ShareDir::Install::INCLUDE_DOTFILES = 1;
@@ -25,6 +25,7 @@
     "script/plackup"
   ],
   "LICENSE" => "perl",
+  "MIN_PERL_VERSION" => "5.008001",
   "NAME" => "Plack",
   "PREREQ_PM" => {
     "Apache::LogFormat::Compiler" => "0.12",
@@ -47,7 +48,7 @@
     "Test::More" => "0.88",
     "Test::Requires" => 0
   },
-  "VERSION" => "1.0031",
+  "VERSION" => "1.0034",
   "test" => {
     "TESTS" => "t/*.t t/HTTP-Message-PSGI/*.t t/HTTP-Server-PSGI/*.t 
t/Plack-Builder/*.t t/Plack-HTTPParser-PP/*.t t/Plack-Handler/*.t 
t/Plack-Loader/*.t t/Plack-MIME/*.t t/Plack-Middleware/*.t 
t/Plack-Middleware/cascade/*.t t/Plack-Middleware/recursive/*.t 
t/Plack-Middleware/stacktrace/*.t t/Plack-Request/*.t t/Plack-Response/*.t 
t/Plack-Runner/*.t t/Plack-TempBuffer/*.t t/Plack-Test/*.t t/Plack-Util/*.t"
   }
@@ -58,7 +59,9 @@
   "Apache::LogFormat::Compiler" => "0.12",
   "Devel::StackTrace" => "1.23",
   "Devel::StackTrace::AsHTML" => "0.11",
+  "ExtUtils::MakeMaker" => 0,
   "File::ShareDir" => "1.00",
+  "File::ShareDir::Install" => "0.06",
   "Filesys::Notify::Simple" => 0,
   "HTTP::Body" => "1.06",
   "HTTP::Message" => "5.814",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/README new/Plack-1.0034/README
--- old/Plack-1.0031/README     2014-08-01 22:19:17.000000000 +0200
+++ new/Plack-1.0034/README     2015-02-02 21:42:46.000000000 +0100
@@ -1,39 +1,48 @@
 NAME
-    Plack - Perl Superglue for Web frameworks and Web Servers (PSGI toolkit)
+
+    Plack - Perl Superglue for Web frameworks and Web Servers (PSGI
+    toolkit)
 
 DESCRIPTION
-    Plack is a set of tools for using the PSGI stack. It contains middleware
-    components, a reference server and utilities for Web application
-    frameworks. Plack is like Ruby's Rack or Python's Paste for WSGI.
+
+    Plack is a set of tools for using the PSGI stack. It contains
+    middleware components, a reference server and utilities for Web
+    application frameworks. Plack is like Ruby's Rack or Python's Paste for
+    WSGI.
 
     See PSGI for the PSGI specification and PSGI::FAQ to know what PSGI and
     Plack are and why we need them.
 
 MODULES AND UTILITIES
-  Plack::Handler
+
+ Plack::Handler
+
     Plack::Handler and its subclasses contains adapters for web servers. We
-    have adapters for the built-in standalone web server HTTP::Server::PSGI,
-    CGI, FCGI, Apache1, Apache2 and HTTP::Server::Simple included in the
-    core Plack distribution.
+    have adapters for the built-in standalone web server
+    HTTP::Server::PSGI, CGI, FCGI, Apache1, Apache2 and
+    HTTP::Server::Simple included in the core Plack distribution.
 
     There are also many HTTP server implementations on CPAN that have Plack
     handlers.
 
     See Plack::Handler when writing your own adapters.
 
-  Plack::Loader
+ Plack::Loader
+
     Plack::Loader is a loader to load one Plack::Handler adapter and run a
     PSGI application code reference with it.
 
-  Plack::Util
+ Plack::Util
+
     Plack::Util contains a lot of utility functions for server implementors
     as well as middleware authors.
 
-  .psgi files
+ .psgi files
+
     A PSGI application is a code reference but it's not easy to pass code
     reference via the command line or configuration files, so Plack uses a
-    convention that you need a file named "app.psgi" or similar, which would
-    be loaded (via perl's core function "do") to return the PSGI application
+    convention that you need a file named app.psgi or similar, which would
+    be loaded (via perl's core function do) to return the PSGI application
     code reference.
 
       # Hello.psgi
@@ -44,75 +53,83 @@
       };
 
     If you use a web framework, chances are that they provide a helper
-    utility to automatically generate these ".psgi" files for you, such as:
+    utility to automatically generate these .psgi files for you, such as:
 
       # MyApp.psgi
       use MyApp;
       my $app = sub { MyApp->run_psgi(@_) };
 
-    It's important that the return value of ".psgi" file is the code
-    reference. See "eg/dot-psgi" directory for more examples of ".psgi"
-    files.
-
-  plackup, Plack::Runner
-    plackup is a command line launcher to run PSGI applications from command
-    line using Plack::Loader to load PSGI backends. It can be used to run
-    standalone servers and FastCGI daemon processes. Other server backends
-    like Apache2 needs a separate configuration but ".psgi" application file
-    can still be the same.
+    It's important that the return value of .psgi file is the code
+    reference. See eg/dot-psgi directory for more examples of .psgi files.
+
+ plackup, Plack::Runner
+
+    plackup is a command line launcher to run PSGI applications from
+    command line using Plack::Loader to load PSGI backends. It can be used
+    to run standalone servers and FastCGI daemon processes. Other server
+    backends like Apache2 needs a separate configuration but .psgi
+    application file can still be the same.
 
     If you want to write your own frontend that replaces, or adds
     functionalities to plackup, take a look at the Plack::Runner module.
 
-  Plack::Middleware
+ Plack::Middleware
+
     PSGI middleware is a PSGI application that wraps an existing PSGI
     application and plays both side of application and servers. From the
     servers the wrapped code reference still looks like and behaves exactly
     the same as PSGI applications.
 
-    Plack::Middleware gives you an easy way to wrap PSGI applications with a
-    clean API, and compatibility with Plack::Builder DSL.
+    Plack::Middleware gives you an easy way to wrap PSGI applications with
+    a clean API, and compatibility with Plack::Builder DSL.
+
+ Plack::Builder
 
-  Plack::Builder
-    Plack::Builder gives you a DSL that you can enable Middleware in ".psgi"
+    Plack::Builder gives you a DSL that you can enable Middleware in .psgi
     files to wrap existent PSGI applications.
 
-  Plack::Request, Plack::Response
-    Plack::Request gives you a nice wrapper API around PSGI $env hash to get
-    headers, cookies and query parameters much like Apache::Request in
+ Plack::Request, Plack::Response
+
+    Plack::Request gives you a nice wrapper API around PSGI $env hash to
+    get headers, cookies and query parameters much like Apache::Request in
     mod_perl.
 
-    Plack::Response does the same to construct the response array reference.
+    Plack::Response does the same to construct the response array
+    reference.
+
+ Plack::Test
 
-  Plack::Test
     Plack::Test is a unified interface to test your PSGI application using
     standard HTTP::Request and HTTP::Response pair with simple callbacks.
 
-  Plack::Test::Suite
+ Plack::Test::Suite
+
     Plack::Test::Suite is a test suite to test a new PSGI server backend.
 
 CONTRIBUTING
-  Patches and Bug Fixes
+
+ Patches and Bug Fixes
+
     Small patches and bug fixes can be either submitted via nopaste on IRC
-    <irc://irc.perl.org/#plack> or the github issue tracker
-    <http://github.com/plack/Plack/issues>. Forking on github
-    <http://github.com/plack/Plack> is another good way if you intend to
-    make larger fixes.
+    irc://irc.perl.org/#plack or the github issue tracker
+    <http://github.com/plack/Plack/issues>. Forking on github is another
+    good way if you intend to make larger fixes.
 
-    See also <http://contributing.appspot.com/plack> when you think this
+    See also http://contributing.appspot.com/plack when you think this
     document is terribly outdated.
 
-  Module Namespaces
-    Modules added to the Plack:: sub-namespaces should be reasonably generic
-    components which are useful as building blocks and not just simply using
-    Plack.
-
-    Middleware authors are free to use the Plack::Middleware:: namespace for
-    their middleware components. Middleware must be written in the pipeline
-    style such that they can chained together with other middleware
-    components. The Plack::Middleware:: modules in the core distribution are
-    good examples of such modules. It is recommended that you inherit from
-    Plack::Middleware for these types of modules.
+ Module Namespaces
+
+    Modules added to the Plack:: sub-namespaces should be reasonably
+    generic components which are useful as building blocks and not just
+    simply using Plack.
+
+    Middleware authors are free to use the Plack::Middleware:: namespace
+    for their middleware components. Middleware must be written in the
+    pipeline style such that they can chained together with other
+    middleware components. The Plack::Middleware:: modules in the core
+    distribution are good examples of such modules. It is recommended that
+    you inherit from Plack::Middleware for these types of modules.
 
     Not all middleware components are wrappers, but instead are more like
     endpoints in a middleware chain. These types of components should use
@@ -127,15 +144,19 @@
     confuse people badly.
 
 AUTHOR
+
     Tatsuhiko Miyagawa
 
 COPYRIGHT
-    The following copyright notice applies to all the files provided in this
-    distribution, including binary files, unless explicitly noted otherwise.
+
+    The following copyright notice applies to all the files provided in
+    this distribution, including binary files, unless explicitly noted
+    otherwise.
 
     Copyright 2009-2013 Tatsuhiko Miyagawa
 
 CORE DEVELOPERS
+
     Tatsuhiko Miyagawa (miyagawa)
 
     Tokuhiro Matsuno (tokuhirom)
@@ -147,6 +168,7 @@
     Graham Knop (haarg)
 
 CONTRIBUTORS
+
     Yuval Kogman (nothingmuch)
 
     Kazuhiro Osawa (Yappo)
@@ -178,15 +200,17 @@
     Aaron Trevena
 
 SEE ALSO
+
     The PSGI specification upon which Plack is based.
 
-    <http://plackperl.org/>
+    http://plackperl.org/
 
-    The Plack wiki: <https://github.com/plack/Plack/wiki>
+    The Plack wiki: https://github.com/plack/Plack/wiki
 
-    The Plack FAQ: <https://github.com/plack/Plack/wiki/Faq>
+    The Plack FAQ: https://github.com/plack/Plack/wiki/Faq
 
 LICENSE
+
     This library is free software; you can redistribute it and/or modify it
     under the same terms as Perl itself.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/App/File.pm 
new/Plack-1.0034/lib/Plack/App/File.pm
--- old/Plack-1.0031/lib/Plack/App/File.pm      2014-08-01 22:19:17.000000000 
+0200
+++ new/Plack-1.0034/lib/Plack/App/File.pm      2015-02-02 21:42:46.000000000 
+0100
@@ -51,7 +51,7 @@
         @path = ('.');
     }
 
-    if (grep $_ eq '..', @path) {
+    if (grep /^\.{2,}$/, @path) {
         return $self->return_403;
     }
 
@@ -143,7 +143,7 @@
   # Or map the path to a specific file
   use Plack::Builder;
   builder {
-      mount "/favicon.ico" => Plack::App::File->new(file => 
'/path/to/favicon.ico');
+      mount "/favicon.ico" => Plack::App::File->new(file => 
'/path/to/favicon.ico')->to_app;
   };
 
 =head1 DESCRIPTION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/App/WrapCGI.pm 
new/Plack-1.0034/lib/Plack/App/WrapCGI.pm
--- old/Plack-1.0031/lib/Plack/App/WrapCGI.pm   2014-08-01 22:19:17.000000000 
+0200
+++ new/Plack-1.0034/lib/Plack/App/WrapCGI.pm   2015-02-02 21:42:46.000000000 
+0100
@@ -9,6 +9,13 @@
 use Carp;
 use POSIX ":sys_wait_h";
 
+sub slurp_fh {
+    my $fh = $_[0];
+    local $/;
+    my $v = <$fh>;
+    defined $v ? $v : '';
+}
+
 sub prepare_app {
     my $self = shift;
     my $script = $self->script
@@ -53,19 +60,15 @@
             close $stdoutw;
             close $stdinr;
 
-            syswrite($stdinw, do {
-                local $/;
-                my $fh = $env->{'psgi.input'};
-                <$fh>;
-            });
+            syswrite($stdinw, slurp_fh($env->{'psgi.input'}));
             # close STDIN so child will stop waiting
             close $stdinw;
 
             my $res = '';
             while (waitpid($pid, WNOHANG) <= 0) {
-                $res .= do { local $/; <$stdoutr> } || '';
+                $res .= slurp_fh($stdoutr);
             }
-            $res .= do { local $/; <$stdoutr> } || '';
+            $res .= slurp_fh($stdoutr);
 
             if (POSIX::WIFEXITED($?)) {
                 return CGI::Parse::PSGI::parse_cgi_output(\$res);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Handler/FCGI.pm 
new/Plack-1.0034/lib/Plack/Handler/FCGI.pm
--- old/Plack-1.0031/lib/Plack/Handler/FCGI.pm  2014-08-01 22:19:17.000000000 
+0200
+++ new/Plack-1.0034/lib/Plack/Handler/FCGI.pm  2015-02-02 21:42:46.000000000 
+0100
@@ -30,10 +30,19 @@
 sub run {
     my ($self, $app) = @_;
 
+    my $running_on_server_starter = exists $ENV{SERVER_STARTER_PORT};
     my $sock = 0;
     if (-S STDIN) {
         # running from web server. Do nothing
         # Note it should come before listen check because of plackup's default
+    } elsif ($running_on_server_starter) {
+        # Runing under Server::Starter
+        require Server::Starter;
+        my %socks = %{Server::Starter::server_ports()};
+        if (scalar(keys(%socks)) > 1) {
+            die "More than one socket are specified by Server::Starter";
+        }
+        $sock = (values %socks)[0];
     } elsif ($self->{listen}) {
         my $old_umask = umask;
         unless ($self->{leave_umask}) {
@@ -60,7 +69,7 @@
 
     my $proc_manager;
 
-    if ($self->{listen}) {
+    if ($self->{listen} or $running_on_server_starter) {
         $self->daemon_fork if $self->{daemonize};
 
         if ($self->{manager}) {
@@ -409,6 +418,14 @@
 
   FcgiPassHeader Authorization
 
+=head2 Server::Starter
+
+This plack handler supports L<Server::Starter> as a superdaemon.
+Simply launch plackup from start_server with a path option.
+The listen option is ignored when launched from Server::Starter.
+
+  start_server --path=/tmp/socket -- plackup -s FCGI app.psgi 
+
 =head1 SEE ALSO
 
 L<Plack>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Loader/Restarter.pm 
new/Plack-1.0034/lib/Plack/Loader/Restarter.pm
--- old/Plack-1.0031/lib/Plack/Loader/Restarter.pm      2014-08-01 
22:19:17.000000000 +0200
+++ new/Plack-1.0034/lib/Plack/Loader/Restarter.pm      2015-02-02 
21:42:46.000000000 +0100
@@ -56,9 +56,9 @@
 }
 
 sub run {
-    my($self, $server, $builder) = @_;
+    my($self, $server) = @_;
 
-    $self->_fork_and_start($server, $builder);
+    $self->_fork_and_start($server);
     return unless $self->{pid};
 
     require Filesys::Notify::Simple;
@@ -86,7 +86,7 @@
 
         $self->_kill_child;
         warn "Successfully killed! Restarting the new server process.\n";
-        $self->_fork_and_start($server, $builder);
+        $self->_fork_and_start($server);
         return unless $self->{pid};
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Middleware/ErrorDocument.pm 
new/Plack-1.0034/lib/Plack/Middleware/ErrorDocument.pm
--- old/Plack-1.0031/lib/Plack/Middleware/ErrorDocument.pm      2014-08-01 
22:19:17.000000000 +0200
+++ new/Plack-1.0034/lib/Plack/Middleware/ErrorDocument.pm      2015-02-02 
21:42:46.000000000 +0100
@@ -72,9 +72,9 @@
                 my $done;
                 return sub {
                     unless ($done) {
+                        $done = 1;
                         return join '', <$fh>;
                     }
-                    $done = 1;
                     return defined $_[0] ? '' : undef;
                 };
             };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Middleware/Lint.pm 
new/Plack-1.0034/lib/Plack/Middleware/Lint.pm
--- old/Plack-1.0031/lib/Plack/Middleware/Lint.pm       2014-08-01 
22:19:17.000000000 +0200
+++ new/Plack-1.0034/lib/Plack/Middleware/Lint.pm       2015-02-02 
21:42:46.000000000 +0100
@@ -58,7 +58,7 @@
         die('SERVER_PORT must not be empty string');
     }
     if (defined($env->{SERVER_PROTOCOL}) and $env->{SERVER_PROTOCOL} !~ 
m{^HTTP/1.\d$}) {
-        die("Invalid SERVER_PROTOCOL: $env->{SEREVR_PROTOCOL}");
+        die("Invalid SERVER_PROTOCOL: $env->{SERVER_PROTOCOL}");
     }
     for my $param (qw/version url_scheme input errors multithread 
multiprocess/) {
         unless (exists $env->{"psgi.$param"}) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Middleware/StackTrace.pm 
new/Plack-1.0034/lib/Plack/Middleware/StackTrace.pm
--- old/Plack-1.0031/lib/Plack/Middleware/StackTrace.pm 2014-08-01 
22:19:17.000000000 +0200
+++ new/Plack-1.0034/lib/Plack/Middleware/StackTrace.pm 2015-02-02 
21:42:46.000000000 +0100
@@ -4,6 +4,7 @@
 use parent qw/Plack::Middleware/;
 use Devel::StackTrace;
 use Devel::StackTrace::AsHTML;
+use Scalar::Util qw( refaddr );
 use Try::Tiny;
 use Plack::Util::Accessor qw( force no_print_errors );
 
@@ -17,12 +18,18 @@
 sub call {
     my($self, $env) = @_;
 
-    my $trace;
+    my ($trace, %string_traces, %ref_traces);
     local $SIG{__DIE__} = sub {
         $trace = $StackTraceClass->new(
             indent => 1, message => munge_error($_[0], [ caller ]),
-            ignore_package => __PACKAGE__,
+            ignore_package => __PACKAGE__, no_refs => 1,
         );
+        if (ref $_[0]) {
+            $ref_traces{refaddr($_[0])} ||= $trace;
+        }
+        else {
+            $string_traces{$_[0]} ||= $trace;
+        }
         die @_;
     };
 
@@ -34,6 +41,20 @@
         [ 500, [ "Content-Type", "text/plain; charset=utf-8" ], [ 
no_trace_error(utf8_safe($caught)) ] ];
     };
 
+    if ($caught) {
+        # Try to find the correct trace for the caught exception
+        my $caught_trace;
+        if (ref $caught) {
+            $caught_trace = $ref_traces{refaddr($caught)};
+        }
+        else {
+            # This is not guaranteed to work if multiple exceptions with
+            # the same message are thrown.
+            $caught_trace = $string_traces{$caught};
+        }
+        $trace = $caught_trace if $caught_trace;
+    }
+
     if ($trace && ($caught || ($self->force && ref $res eq 'ARRAY' && 
$res->[0] == 500)) ) {
         my $text = $trace->as_string;
         my $html = $trace->as_html;
@@ -109,9 +130,15 @@
 
 =head1 DESCRIPTION
 
-This middleware catches exceptions (run-time errors) happening in your
-application and displays nice stack trace screen. The stack trace is
-also stored in the environment as a plaintext and HTML under the key
+This middleware uses C<$SIG{__DIE__}> to intercept I<all> exceptions
+(run-time errors) happening in your application, even those that are caught.
+For each exception it builds a detailed stack trace.
+
+If the applications aborts by throwing an exception it will be caught and 
matched
+against the saved stack traces. If a match is found it will be displayed as a 
nice
+stack trace screen, if not then the exception will be reported without a stack 
trace.
+
+The stack trace is also stored in the environment as a plaintext and HTML 
under the key
 C<plack.stacktrace.text> and C<plack.stacktrace.html> respectively, so
 that middleware further up the stack can reference it.
 
@@ -126,6 +153,19 @@
 
 Catching errors in streaming response is not supported.
 
+=head2 Stack Trace Module
+
+The L<Devel::StackTrace::WithLexicals> module will be used to capture the 
stack trace
+if the installed version is 0.08 or later. Otherwise L<Devel::StackTrace> is 
used.
+
+=head2 Performance
+
+Gathering the information for a stack trace via L<Devel::StackTrace> is slow,
+and L<Devel::StackTrace::WithLexicals> is significantly slower still.
+This is not usually a concern in development and when exceptions are rare.
+However, your application may include code that's throwing and catching 
exceptions
+that you're not aware of. Such code will run I<significantly> slower with this 
module.
+
 =head1 CONFIGURATION
 
 =over 4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Middleware.pm 
new/Plack-1.0034/lib/Plack/Middleware.pm
--- old/Plack-1.0031/lib/Plack/Middleware.pm    2014-08-01 22:19:17.000000000 
+0200
+++ new/Plack-1.0034/lib/Plack/Middleware.pm    2015-02-02 21:42:46.000000000 
+0100
@@ -100,11 +100,16 @@
 function in L<Plack::Util> when implementing a post processing
 middleware.
 
-  my $res = $app->($env);
-  Plack::Util::response_cb($res, sub {
-      my $res = shift;
-      # do something with $res;
-  });
+  sub call {
+      my($self, $env) = @_;
+      # pre-processing $env
+      my $res = $app->($env);
+
+      return Plack::Util::response_cb($res, sub {
+          my $res = shift;
+          # do something with $res;
+      });
+  }
 
 The callback function gets a response as an array reference, and you can
 update the reference to implement the post-processing. In the normal
@@ -119,7 +124,7 @@
   sub call {
       my($self, $env) = @_;
       my $res  = $self->app->($env);
-      Plack::Util::response_cb($res, sub {
+      return Plack::Util::response_cb($res, sub {
           my $res = shift;
           $res->[0] = 500;
           return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Request.pm 
new/Plack-1.0034/lib/Plack/Request.pm
--- old/Plack-1.0031/lib/Plack/Request.pm       2014-08-01 22:19:17.000000000 
+0200
+++ new/Plack-1.0034/lib/Plack/Request.pm       2015-02-02 21:42:46.000000000 
+0100
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 use 5.008_001;
-our $VERSION = '1.0031';
+our $VERSION = '1.0034';
 
 use HTTP::Headers;
 use Carp ();
@@ -325,7 +325,7 @@
       my $req = Plack::Request->new($env);
 
       my $path_info = $req->path_info;
-      my $query     = $req->param('query');
+      my $query     = $req->parameters->{query};
 
       my $res = $req->new_response(200); # new Plack::Response
       $res->finalize;
@@ -457,7 +457,7 @@
 If there are multiple cookies with the same name in the request, this
 method will ignore the duplicates and return only the first value. If
 that causes issues for you, you may have to use modules like
-CGI::Simple::Cookie to parse C<<$request->header('Cookies')>> by
+CGI::Simple::Cookie to parse C<< $request->header('Cookies') >> by
 yourself.
 
 =item query_parameters
@@ -538,8 +538,15 @@
 
 Returns GET and POST parameters with a CGI.pm-compatible param
 method. This is an alternative method for accessing parameters in
-$req->parameters. Unlike CGI.pm, it does I<not> allow
-setting or modifying query parameters.
+$req->parameters just in case you want the compatibility with
+CGI.pm objects.
+
+You are B<not recommended> to use this method since it is easy to
+misuse in a list context such as inside a hash constructor or method
+arguments. Use C<parameters> and Hash::MultiValue instead.
+
+Unlike CGI.pm, it does I<not> allow setting or modifying query
+parameters.
 
     $value  = $req->param( 'foo' );
     @values = $req->param( 'foo' );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Response.pm 
new/Plack-1.0034/lib/Plack/Response.pm
--- old/Plack-1.0031/lib/Plack/Response.pm      2014-08-01 22:19:17.000000000 
+0200
+++ new/Plack-1.0034/lib/Plack/Response.pm      2015-02-02 21:42:46.000000000 
+0100
@@ -1,7 +1,7 @@
 package Plack::Response;
 use strict;
 use warnings;
-our $VERSION = '1.0031';
+our $VERSION = '1.0034';
 
 use Plack::Util::Accessor qw(body status);
 use Carp ();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack/Test/Suite.pm 
new/Plack-1.0034/lib/Plack/Test/Suite.pm
--- old/Plack-1.0031/lib/Plack/Test/Suite.pm    2014-08-01 22:19:17.000000000 
+0200
+++ new/Plack-1.0034/lib/Plack/Test/Suite.pm    2015-02-02 21:42:46.000000000 
+0100
@@ -813,6 +813,9 @@
 
   Plack::Test::Suite->run_server_tests('Foo');
 
+Developers writing Plack applications should look at C<Plack::Test> for 
testing,
+as subclassing C<Plack::Handler> is for developing server implementations.
+
 =head1 AUTHOR
 
 Tokuhiro Matsuno
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/lib/Plack.pm 
new/Plack-1.0034/lib/Plack.pm
--- old/Plack-1.0031/lib/Plack.pm       2014-08-01 22:19:17.000000000 +0200
+++ new/Plack-1.0034/lib/Plack.pm       2015-02-02 21:42:46.000000000 +0100
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 use 5.008_001;
-our $VERSION = '1.0031';
+our $VERSION = '1.0034';
 
 1;
 __END__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/script/plackup 
new/Plack-1.0034/script/plackup
--- old/Plack-1.0031/script/plackup     2014-08-01 22:19:17.000000000 +0200
+++ new/Plack-1.0034/script/plackup     2015-02-02 21:42:46.000000000 +0100
@@ -10,7 +10,7 @@
 
 =head1 NAME
 
-plackup - Run PSGI application with Plack servers
+plackup - Run PSGI application with Plack handlers
 
 =head1 SYNOPSIS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/t/Plack-Loader/restarter.t 
new/Plack-1.0034/t/Plack-Loader/restarter.t
--- old/Plack-1.0031/t/Plack-Loader/restarter.t 2014-08-01 22:19:17.000000000 
+0200
+++ new/Plack-1.0034/t/Plack-Loader/restarter.t 2015-02-02 21:42:46.000000000 
+0100
@@ -5,7 +5,9 @@
 use HTTP::Request::Common;
 use Plack::Loader::Restarter;
 
-plan skip_all => "release test only" unless $ENV{AUTHOR_TESTING};
+plan skip_all => "author test only" unless $ENV{AUTHOR_TESTING};
+
+$SIG{__WARN__} = sub { diag @_ };
 
 my @return_bodies = ('Hi first', 'Hi second', 'Hi third');
 my @restartertestfiles = ('t/restartertestfile1.pl', 
't/restartertestfile2.pl');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/t/Plack-Middleware/cgi-bin/hello.cgi 
new/Plack-1.0034/t/Plack-Middleware/cgi-bin/hello.cgi
--- old/Plack-1.0031/t/Plack-Middleware/cgi-bin/hello.cgi       2014-08-01 
22:19:17.000000000 +0200
+++ new/Plack-1.0034/t/Plack-Middleware/cgi-bin/hello.cgi       2015-02-02 
21:42:46.000000000 +0100
@@ -1,4 +1,4 @@
 #!/usr/bin/perl
 use CGI;
 my $q = CGI->new;
-print $q->header, "Hello ", $q->param('name'), " counter=", ++$COUNTER;
+print $q->header, "Hello ", scalar $q->param('name'), " counter=", ++$COUNTER;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/t/Plack-Middleware/cgi-bin/hello2.cgi 
new/Plack-1.0034/t/Plack-Middleware/cgi-bin/hello2.cgi
--- old/Plack-1.0031/t/Plack-Middleware/cgi-bin/hello2.cgi      2014-08-01 
22:19:17.000000000 +0200
+++ new/Plack-1.0034/t/Plack-Middleware/cgi-bin/hello2.cgi      2015-02-02 
21:42:46.000000000 +0100
@@ -1,4 +1,4 @@
 #!/usr/bin/perl
 use CGI;
 my $q = CGI->new;
-print $q->header, "Hello ", $q->param('name'), " counter=", ++$COUNTER;
+print $q->header, "Hello ", scalar $q->param('name'), " counter=", ++$COUNTER;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Plack-1.0031/t/Plack-Middleware/stacktrace/multiple_exceptions.t 
new/Plack-1.0034/t/Plack-Middleware/stacktrace/multiple_exceptions.t
--- old/Plack-1.0031/t/Plack-Middleware/stacktrace/multiple_exceptions.t        
1970-01-01 01:00:00.000000000 +0100
+++ new/Plack-1.0034/t/Plack-Middleware/stacktrace/multiple_exceptions.t        
2015-02-02 21:42:46.000000000 +0100
@@ -0,0 +1,123 @@
+use strict;
+use warnings;
+use Test::More;
+use Plack::Middleware::StackTrace;
+use Plack::Test;
+use HTTP::Request::Common;
+
+{
+    # Simple exception object
+    package Plack::Middleware::StackTrace::Exception;
+
+    use overload '""' => sub { $_[0]->{message} };
+
+    sub new {
+        my ($class, $message) = @_;
+        return bless { message => $message }, $class;
+    }
+}
+
+# Tracks how often the destructor was called
+my $dtor_count;
+
+{
+    # A class similar to DBIx::Class::Storage::TxnScopeGuard where the
+    # destructor might throw and catch another exception.
+    package Plack::Middleware::StackTrace::Guard;
+    use Try::Tiny;
+
+    sub new {
+        my ($class, $exception) = @_;
+        return bless { exception => $exception }, $class;
+    }
+
+    sub DESTROY {
+        my $self = shift;
+        ++$dtor_count;
+        try { die $self->{exception}; };
+    }
+}
+
+sub test_dtor_exception {
+    my ($orig_exception, $dtor_exception) = @_;
+
+    my $dtor_exception_app = sub {
+        my $guard = Plack::Middleware::StackTrace::Guard->new($dtor_exception);
+        die $orig_exception;
+    };
+
+    my $trace_app = Plack::Middleware::StackTrace->wrap($dtor_exception_app,
+        no_print_errors => 1,
+    );
+
+    test_psgi $trace_app, sub {
+        my $cb = shift;
+
+        $dtor_count = 0;
+        my $req = GET "/";
+        my $res = $cb->($req);
+
+        is $res->code, 500, "Status code is 500";
+        like $res->content, qr/^\Q$orig_exception\E at /,
+             "Original exception returned";
+        is $dtor_count, 1, "Destructor called only once";
+    };
+}
+
+test_dtor_exception("urz", "orz");
+test_dtor_exception(
+    Plack::Middleware::StackTrace::Exception->new("urz"),
+    Plack::Middleware::StackTrace::Exception->new("orz"),
+);
+
+{
+    # A middleware that rethrows exceptions
+    package Plack::Middleware::StackTrace::Rethrow;
+    use parent qw(Plack::Middleware);
+    use Try::Tiny;
+
+    sub call {
+        my ($self, $env) = @_;
+        try {
+            $self->app->($env);
+        } catch {
+            die $_;
+        };
+    }
+}
+
+# This sub is expected to appear in the stack trace.
+sub fizzle {
+    my $exception = shift;
+    die $exception;
+}
+
+sub test_rethrown_exception {
+    my $exception = shift;
+
+    my $die_app = sub {
+        fizzle($exception);
+    };
+
+    my $rethrow_app = Plack::Middleware::StackTrace::Rethrow->wrap($die_app);
+
+    my $trace_app = Plack::Middleware::StackTrace->wrap($rethrow_app,
+        no_print_errors => 1,
+    );
+
+    test_psgi $trace_app, sub {
+        my $cb = shift;
+
+        my $req = GET "/";
+        my $res = $cb->($req);
+
+        is $res->code, 500, "Status code is 500";
+        like $res->content, qr/\bfizzle\b/, "Original stack trace returned";
+    };
+}
+
+test_rethrown_exception("orz");
+test_rethrown_exception(Plack::Middleware::StackTrace::Exception->new("orz"));
+
+done_testing;
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Plack-1.0031/t/Plack-Middleware/wrapcgi_exec.t 
new/Plack-1.0034/t/Plack-Middleware/wrapcgi_exec.t
--- old/Plack-1.0031/t/Plack-Middleware/wrapcgi_exec.t  2014-08-01 
22:19:17.000000000 +0200
+++ new/Plack-1.0034/t/Plack-Middleware/wrapcgi_exec.t  2015-02-02 
21:42:46.000000000 +0100
@@ -15,7 +15,7 @@
 #!$^X
 use CGI;
 my \$q = CGI->new;
-print \$q->header, "Hello ", \$q->param('name'), " counter=", ++\$COUNTER;
+print \$q->header, "Hello ", scalar \$q->param('name'), " counter=", 
++\$COUNTER;
 ...
     close $tmp;
 


Reply via email to