From f3e5107811947cd829edd711dcef0c6243a13ac4 Mon Sep 17 00:00:00 2001 From: Matthew Wilson Date: Fri, 4 Nov 2005 05:57:48 +0000 Subject: [PATCH] fixed various bugs with new date/time and added new Apache2::Upload functionality to Storage. --- lib/WebGUI/Asset/Wobject.pm | 2 +- lib/WebGUI/Storage.pm | 55 +++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject.pm b/lib/WebGUI/Asset/Wobject.pm index f7dd276bd..b337ad8ea 100644 --- a/lib/WebGUI/Asset/Wobject.pm +++ b/lib/WebGUI/Asset/Wobject.pm @@ -14,7 +14,7 @@ package WebGUI::Asset::Wobject; =cut -use CGI::Util qw(rearrange); +#use CGI::Util qw(rearrange); use DBI; use strict qw(subs vars); use Tie::IxHash; diff --git a/lib/WebGUI/Storage.pm b/lib/WebGUI/Storage.pm index b9b18b587..d7d7f4596 100644 --- a/lib/WebGUI/Storage.pm +++ b/lib/WebGUI/Storage.pm @@ -27,6 +27,8 @@ use WebGUI::Id; use WebGUI::Session; use WebGUI::URL; use WebGUI::Utility; +use Apache2::Request; +use Apache2::Upload; =head1 NAME @@ -199,35 +201,34 @@ sub addFileFromFormPost { return "" if (WebGUI::HTTP::getStatus() =~ /^413/); my $filename; my $attachmentCount = 1; - foreach my $tempPath ($session{req}->upload($formVariableName)) { - last if $attachmentCount > $attachmentLimit; - if ($tempPath =~ /([^\/\\]+)$/) { - $filename = $1; - } else { - $filename = $tempPath; - } - my $type = $self->getFileExtension($filename); - if (isIn($type, qw(pl perl sh cgi php asp))) { # make us safe from malicious uploads - $filename =~ s/\./\_/g; - $filename .= ".txt"; - } - $filename = WebGUI::URL::makeCompliant($filename); + foreach my $upload ($session{req}->upload($formVariableName)) { + last if $attachmentCount > $attachmentLimit; + my $tempPath = $upload->tempname(); + $filename = $upload->filename(); + next unless $filename; + my $type = $self->getFileExtension($filename); + if (isIn($type, qw(pl perl sh cgi php asp))) { # make us safe from malicious uploads + $filename =~ s/\./\_/g; + $filename .= ".txt"; + } + $filename = WebGUI::URL::makeCompliant($filename); my $bytesread; - my $file = FileHandle->new(">".$self->getPath($filename)); - $attachmentCount++; - if (defined $file) { + my $file = FileHandle->new(">".$self->getPath($filename)); + $attachmentCount++; + if (defined $file) { my $buffer; - binmode $file; - while ($bytesread=read($tempPath,$buffer,1024)) { - print $file $buffer; - } - close($file); - } else { - $self->_addError("Couldn't open file ".$self->getPath($filename)." for writing due to error: ".$!); - return undef; - } - } - return $filename; + my $sourcefh = $upload->fh; + binmode $file; + while ($bytesread=read($sourcefh,$buffer,1024)) { + print $file $buffer; + } + close($file); + } else { + $self->_addError("Couldn't open file ".$self->getPath($filename)." for writing due to error: ".$!); + return undef; + } + } + return $filename; }