Author: gozer
Date: Sat Feb 23 23:23:16 2008
New Revision: 630597

URL: http://svn.apache.org/viewvc?rev=630597&view=rev
Log:
Fix a possible $r->location curruption. Sometimes, the
path copied into $r->location would end it's life before
$r.

Reviewed-By: gozer
Submitted-By: Torsten Foertsch <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>


Modified:
    perl/modperl/trunk/Changes
    perl/modperl/trunk/src/modules/perl/modperl_config.c
    perl/modperl/trunk/t/response/TestAPI/add_config.pm

Modified: perl/modperl/trunk/Changes
URL: 
http://svn.apache.org/viewvc/perl/modperl/trunk/Changes?rev=630597&r1=630596&r2=630597&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Sat Feb 23 23:23:16 2008
@@ -12,6 +12,9 @@
 
 =item 2.0.4-dev
 
+Fix $r->location corruption under certain conditions
+[Gozer]
+
 Fix a crash when spawning Perl threads under Perl 5.10
 [Gozer]
 

Modified: perl/modperl/trunk/src/modules/perl/modperl_config.c
URL: 
http://svn.apache.org/viewvc/perl/modperl/trunk/src/modules/perl/modperl_config.c?rev=630597&r1=630596&r2=630597&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_config.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_config.c Sat Feb 23 23:23:16 
2008
@@ -518,7 +518,7 @@
     parms.limited = -1;
     parms.server = s;
     parms.override = override;
-    parms.path = path;
+    parms.path = apr_pstrdup(p, path);
     parms.pool = p;
 #ifdef MP_HTTPD_HAS_OVERRIDE_OPTS
     if (override_options == MP_HTTPD_OVERRIDE_OPTS_UNSET) {

Modified: perl/modperl/trunk/t/response/TestAPI/add_config.pm
URL: 
http://svn.apache.org/viewvc/perl/modperl/trunk/t/response/TestAPI/add_config.pm?rev=630597&r1=630596&r2=630597&view=diff
==============================================================================
--- perl/modperl/trunk/t/response/TestAPI/add_config.pm (original)
+++ perl/modperl/trunk/t/response/TestAPI/add_config.pm Sat Feb 23 23:23:16 2008
@@ -58,6 +58,14 @@
     };
     $r->pnotes(followsymlinks => "$@");
 
+    eval {
+        my $path="/a/path/to/somewhere";
+        $r->add_config(['PerlResponseHandler '.__PACKAGE__], -1, $path);
+        # now overwrite the path in place to see if the location pointer
+        # is really copied: see modperl_config_dir_create
+        $path=~tr[a-z][n-za-m];
+    };
+
     return Apache2::Const::DECLINED;
 }
 
@@ -82,7 +90,7 @@
     my ($self, $r) = @_;
     my $cf = $self->get_config($r->server);
 
-    plan $r, tests => 8;
+    plan $r, tests => 9;
 
     ok t_cmp $r->pnotes('add_config1'), qr/.+\n/;
     ok t_cmp $r->pnotes('add_config2'), (APACHE22 ? qr/.+\n/ : '');
@@ -102,6 +110,8 @@
     my $opts = APACHE22 ? Apache2::Const::OPT_SYM_LINKS : $expect;
     ok t_cmp $r->allow_override_opts, $opts;
 
+    ok t_cmp $r->location, '/a/path/to/somewhere';
+
     return Apache2::Const::OK;
 }
 
@@ -117,7 +127,6 @@
         <Directory @DocumentRoot@>
             AllowOverride All
         </Directory>
-        PerlResponseHandler TestAPI::add_config
         PerlMapToStorageHandler TestAPI::add_config::map2storage
         PerlFixupHandler TestAPI::add_config::fixup
     </VirtualHost>


Reply via email to