Return-Path: Delivered-To: apmail-perl-modperl-archive@www.apache.org Received: (qmail 3760 invoked from network); 8 Apr 2004 14:31:10 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 8 Apr 2004 14:31:10 -0000 Received: (qmail 66048 invoked by uid 500); 8 Apr 2004 14:30:45 -0000 Delivered-To: apmail-perl-modperl-archive@perl.apache.org Received: (qmail 66032 invoked by uid 500); 8 Apr 2004 14:30:44 -0000 Mailing-List: contact modperl-help@perl.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Delivered-To: mailing list modperl@perl.apache.org Received: (qmail 66018 invoked from network); 8 Apr 2004 14:30:44 -0000 From: "Ken Burcham" To: modperl@perl.apache.org Date: Thu, 08 Apr 2004 10:34:54 -0400 MIME-Version: 1.0 Subject: Re: Problem with modperl2/apache2/apreq2 upload Message-ID: <40752ACE.28692.A5A0CA8@localhost> Priority: normal In-reply-to: <407526F8.30781.A4B1145@localhost> X-mailer: Pegasus Mail for Windows (v4.12a) Content-type: Multipart/Alternative; boundary="Alt-Boundary-7187.173673640" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N --Alt-Boundary-7187.173673640 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT Content-description: Mail message body 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(\@uploads); 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: > >
name="resourceform" parent="resourceform"> > ... > > > length="" max=""> > >
> > length="" max=""> > >
> > max=""> > >
> > max=""> > > ... >
> > 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" 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 --Alt-Boundary-7187.173673640 Content-type: text/html; charset=US-ASCII Content-transfer-encoding: 7BIT Content-description: Mail message body
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(\@uploads);

      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="/input" method="POST" enctype="multipart/form-data"
> name="resourceform" parent="resourceform">
> ...
> <tr>
> <td><label for="effectivedate">effective date</label></td>
>     <td><input type="text" name="effectivedate" value=""
> length="" max=""></td>
> </tr>
>     <br><tr>
> <td><label for="expirationdate">expiration date</label></td>
>     <td><input type="text" name="expirationdate" value=""
> length="" max=""></td>
> </tr>
>     <br><tr>
> <td><label for="modby">moderated by</label></td>
>     <td><input type="text" name="modby" value="" length=""
> max=""></td>
> </tr>
>     <br><tr>
> <td><label for="resourceurl">resource 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" <ken@burcham.com> 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
--Alt-Boundary-7187.173673640--