Ok, I might be on to something...
I think the segfault is coming when I call 'upload' with a non-
upload field... But since calling 'upload' without a name
returns to me a list of variable names that include non-upload
fields, iterating through guarantees me to segfault:
(NOTE: resourceurl is the only 'file' field on my form with 23
other 'text' fields)
my $q = Apache::Request->new($r);
my @uploads = $q->upload;
if(@uploads)
{
warn "Got an UPLOAD Array: ". scalar @uploads;
$context->uploadsarray([EMAIL PROTECTED]);
foreach my $uploadfilename (@uploads)
{
#my $upload = $q->upload($uploadfilename);
#SEGFAULTS!
if ($uploadfilename eq 'resourceurl')
{
my
$upload = $q->upload($uploadfilename); # DOESN'T SEFAULT!
warn
"UPLOADER FILENAME: ".$upload->filename;
warn
"UPLOADER found $uploadfilename ";
}
else
{
warn
"UPLOADER FOUND BOGUS PARM: $uploadfilename";
}
}
}
Here's the results:
Got an UPLOAD Array: 24 at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 89.
UPLOADER FOUND BOGUS PARM: sys_community at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line
104.
UPLOADER FOUND BOGUS PARM: sys_name at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: name at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: keywords at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: author at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: contact at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: title at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: summary at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: msgmoderator at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line
104.
UPLOADER FOUND BOGUS PARM: status at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: datecreated at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line
104.
UPLOADER FOUND BOGUS PARM: effectivedate at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line
104.
UPLOADER FOUND BOGUS PARM: expirationdate at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line
104.
UPLOADER FOUND BOGUS PARM: modby at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FILENAME: G:\projects\gcx\temp\navSub_bullet_grey.gif at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm
line 99.
UPLOADER found resourceurl at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 100.
UPLOADER FOUND BOGUS PARM: language-dropdown at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm
line 104.
UPLOADER FOUND BOGUS PARM: quality at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: version at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: downloads at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: source at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: uploader at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: parentid at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
UPLOADER FOUND BOGUS PARM: resourcetype-dropdown at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm
line 104.
UPLOADER FOUND BOGUS PARM: sys_action at /usr/lib/perl5/site_perl/5.8.0/GCX/Runtime/Input/Handler.pm line 104.
Here's my segfault:
child pid 6758 exit signal Segmentation fault (11)
And I rebuilt mod_perl2 with MP_DEBUG=1 but I don't see a core
anywhere? Where would I look?
ken.
On 8 Apr 2004 at 10:18, Ken Burcham wrote:
> Joe: Thanks so much for taking the time to answer...
>
> I'll look into the segfault backtrace next...
>
> When I do this:
>
> my $q = Apache::Request->new($r);
> my @uploads = $q->upload;
>
> warn 'Number of uploads: '. scalar @uploads;
>
> foreach my $uploadfilename (@$uploads)
> {
> #my $upload = $q->upload($uploadfilename); #SEGFAULTS!
> warn "UPLOADER found " . $uploadfilename;
> }
>
> I get "Number of uploads: 24" which is the number of fields on my
> multipart html form of which only one is a "file" type:
>
> <form action="" method="POST" enctype="multipart/form-data"
> name="resourceform" parent="resourceform">
> ...
> <tr>
> <td><label for="" date</label></td>
> <td><input type="text" name="effectivedate"
value=""
> length="" max=""></td>
> </tr>
> <br><tr>
> <td><label for="" date</label></td>
> <td><input type="text" name="expirationdate"
value=""
> length="" max=""></td>
> </tr>
> <br><tr>
> <td><label for="" by</label></td>
> <td><input type="text" name="modby"
value="" length=""
> max=""></td>
> </tr>
> <br><tr>
> <td><label for="" url</label></td>
> <td><input type="file" name="resourceurl"
value="" length=""
> max=""></td>
> </tr>
> ...
> </form>
>
> In my apache error log I see:
>
> ...
> UPLOADER found effectivedate at (eval 20) line 14.
> UPLOADER found expirationdate at (eval 20) line 14.
> UPLOADER found modby at (eval 20) line 14.
> UPLOADER found resourceurl at (eval 20) line 14.
> ...
>
>
> So it looks to me like EVERY field gets dumped into the upload
> array... Like I said, I'm probably doing something stupid...
>
> I'll look into the backtrace now...
>
> THANKS so much!
>
> ken.
>
>
>
>
> On 8 Apr 2004 at 9:18, Joe Schaefer wrote:
>
> > "Ken Burcham" <[EMAIL PROTECTED]> writes:
> >
> > > > That's certainly supposed to work, assuming 'somefilename' is
> > > > the name of the upload widget in your HTML form. Can you post
> > > > a backtrace for the segfault?
> > >
> > > Sure... umm... how do I do that? :)
> > >
> > > I'm still pretty new to perl.
> >
> > Segfaults arise from buggy C code. For instructions on generating
> > a backtrace, read
> >
> > http://perl.apache.org/docs/2.0/user/help/help.html#Resolving_Segmentation_Faults
> >
> > > >
> > > > That is correct. In apache1 the uploads formed a linked list
> > > > internally, but that's no longer true in apreq2. In apreq2
> > > > $req->upload follows the same interface pattern as $req->param.
> > >
> > > How do I get to just the upload items? Or do I test via $upload-
> > > >info/type?
> >
> >
> > No need to test anything: $req->upload() works just like
> > $req->param(), but it is restricted to uploads only. For example
> >
> > my $upload_table_ref = $req->upload; # APR::Table ref of uploads
> >
> > foreach my $name (keys %$upload_table_ref) {
> > my @uploads = $req->upload($name); # Array
of Apache::Upload
> >
# objects having name = $name
> > # do something with @uploads
> > }
> >
> > --
> > Joe Schaefer
> >
> >
> > --
> > Report problems: http://perl.apache.org/bugs/
> > Mail list info: http://perl.apache.org/maillist/modperl.html
> > List etiquette: http://perl.apache.org/maillist/email-etiquette.html
>
>
> ------- End of forwarded message ---------
> Ken Burcham
> Ken Burcham Consulting, Inc.
> http://www.capemaystation.com
>
>
>
> --
> Report problems: http://perl.apache.org/bugs/
> Mail list info: http://perl.apache.org/maillist/modperl.html
> List etiquette: http://perl.apache.org/maillist/email-etiquette.html
--
Ken Burcham
Ken Burcham Consulting, Inc.
http://www.capemaystation.com