blob: 50839b9d572db19dd036e3b73053879840ab417e [file] [log] [blame]
#!perl
use strict;
use Apache::testold;
my $r = shift;
$r->send_http_header('text/plain');
eval {
require Apache::Request;
};
unless (have_module "Apache::Request" and Apache::Request->can('upload')) {
print "1..0\n";
print $@ if $@;
print "$INC{'Apache/Request.pm'}\n";
return;
}
my $apr = Apache::Request->new($r);
for ($apr->param) {
my(@v) = $apr->param($_);
print "param $_ => @v\n";
}
for (my $upload = $apr->upload; $upload; $upload = $upload->next) {
my $fh = $upload->fh;
my $filename = $upload->filename;
my $name = $upload->name;
my $type = $upload->type;
next unless $filename;
print "$name $filename ($type)";
if ($fh and $name) {
no strict;
if (my $no = fileno($filename)) {
print " fileno => $no";
}
}
print "\n";
close $fh;
}
my $first = $apr->upload->name;
my $first_filename = $apr->upload->filename;
my $first_fh = $apr->upload->fh;
if ($first_fh) {
while (<$first_fh>) { }
}
close $first_fh;
for my $upload ($apr->upload) {
my $fh = $upload->fh;
my $filename = $upload->filename;
my $name = $upload->name;
next unless $filename;
my($lines, $bytes);
$lines = $bytes = 0;
{
no strict;
if (fileno($filename)) {
$fh = *$filename{IO};
print "COMPAT: $fh\n";
}
}
use File::Basename;
local *OUT;
if (my $dir = $apr->header_in("X-Upload-Tmp")) {
if (-d $dir) {
Apache->untaint($dir);
my $file = basename $filename;
open OUT, ">$dir/$file" or die $!;
}
}
while(<$fh>) {
++$lines;
$bytes += length;
print OUT $_ if fileno OUT;
}
close OUT if fileno OUT;
close $fh;
my $info = $upload->info;
while (my($k,$v) = each %$info) {
print "INFO: $k => $v\n";
}
unless ($name eq $first) {
print "-" x 40, $/;
my $info = $apr->upload($first)->info;
print "Lookup `$first':[$info]\n";
while (my($k,$v) = each %$info) {
print "INFO: $k => $v\n";
}
my $type = $apr->upload($first)->info("content-type");
unless ($type) {
die "upload->info is broken";
}
print "TYPE: $type\n";
print "-" x 40, $/;
}
my $wanted = $upload->size;
unless ($bytes == $wanted) {
die "wanted $wanted bytes, got $bytes bytes";
}
print "Server: Lines: $lines\n";
print "$filename bytes=$bytes,wanted=$wanted\n";
}