diff -Nur -x '*.orig' -x '*.rej' CGI-Persistent-1.00/lib/CGI/Persistent.pm mezzanine_patched_CGI-Persistent-1.00/lib/CGI/Persistent.pm --- CGI-Persistent-1.00/lib/CGI/Persistent.pm 2007-11-25 15:56:19.000000000 -0700 +++ mezzanine_patched_CGI-Persistent-1.00/lib/CGI/Persistent.pm 2007-11-25 15:54:42.000000000 -0700 @@ -10,7 +10,7 @@ package CGI::Persistent; -use CGI; +use CGI '-no_xhtml'; use Persistence::Object::Simple; use vars qw(@ISA $VERSION); use Data::Dumper; @@ -22,18 +22,18 @@ my ( $class, $dope, $id ) = @_ ; $dope = "." unless $dope; my $cgi = new CGI; # print $cgi->header (); - $cgi->{sessiondir} = dirname($id) if $id; - my $fn = basename($cgi->param( '.id' ) || $id); + my $fn = fileparse($cgi->param( '.id' ) || $id || ''); unless ( $fn ) { my $po = new Persistence::Object::Simple ( __Dope => $dope ); - $cgi->append( -name => '.id', -values => basename $po->{ __Fn } ); - $fn = basename $po->{ __Fn }; undef $po; + $fn = fileparse $po->{ __Fn }; + $cgi->append( -name => '.id', -values => $fn ); + undef $po; } - my $po = new Persistence::Object::Simple __Fn => - join "/", ($cgi->{sessiondir},$fn); + my $po = new Persistence::Object::Simple __Fn => "$dope/$fn"; $po->{ __DOPE } = undef; + $po->{sessiondir} = $dope; my @names = $cgi->param (); my $st = $cgi->param('.sailthru'); @@ -43,7 +43,16 @@ foreach $key ( keys %$po ) { $cgi->param( -name => $key, -values => $po->{$key} ) - unless ( grep /$key/, @names ) || $key eq "__Fn" + unless ( grep /$key/, @names ) || $key eq "__Fn"; + } + + $cgi->{sessiondir} = $po->{sessiondir}; + + # Stringify the params. This is black magic to work around an interpreter + # crash in Data::Dumper. + foreach my $param ($cgi->param) + { + my $s = "param $param is " . $cgi->param($param) . "\n"; } $po->commit ();