use strict; use Apache::test; 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"; }