Some more info:  I've rebuilt everything with debug, and the SEGV is
happening in mod_perl.c in the following code:

#ifdef PERL_HEADER_PARSER
int PERL_HEADER_PARSER_HOOK(request_rec *r)
{
    dSTATUS;
    dPPDIR;
#ifdef PERL_INIT
    PERL_CALLBACK("PerlInitHandler",
                         cld->PerlInitHandler);
#endif
    PERL_CALLBACK("PerlHeaderParserHandler",
                         cld->PerlHeaderParserHandler);
    return status;
}
#endif

specifically the macro dPPDIR.  I notice that the request_rec pointer
passed in has one field that points to an invalid address, I don't know
if it is relevant:

   parsed_uri        = {
      scheme         = (nil)  
      hostinfo       = (nil)  
      user           = 0x174fa0 "/"  
      password       = (nil)  
      hostname       = (nil)  
      port_str       = (nil)  
      path           = 0x8000 "<bad address 0x8000>"  
      query          = 0x175418 ""  
      fragment       = 0x174e20 ""  
      hostent        = 0x1755a0 
      port           = 23U 
      is_initialized = 0 
      dns_looked_up  = 1U 
      dns_resolved   = 0

expanding out dPPDIR it refers to r->per_dir_config and &perl_module. 
r->per_dir_config is a void*, and has the value 8, which sure doesn't
look like a valid address to me.  perl_module on the other hand all
looks sane.  I'm not sure where to look next - any suggestions? 

-- 
Alan Burlison

Reply via email to