Hi Jeff,
Thanks for your feedback.
On Thu, 8 Feb 2001, Jeffrey W. Baker wrote:
> On Thu, 8 Feb 2001, Nick Tonkin wrote:
>
> >
> > Hi all,
> >
> > No response on this so here it is again, any clues appreciated:
> >
> > I am encountering a weird problem with Apache::URI ... consider, please,
> > this test handler:
> >
> >[ ... ]
> >
> > This code has worked fine for two years or more on my FreeBSD boxes; this
> > is on Linux RedHat 7 ... dunno if that makes a difference.
>
> It doesn't make a difference. Segfaults for me on Slackware-current, too.
> However, I would suggest avoinding RH 7.0 and its buggy compiler!
Jeez, I have had nothin but headaches with RedHat. I have always used
FreeBSD but it didn't know about the SCSI disks on the customer's HP
NetServer ... maybe I'll try again with Suse or Slackware before I get too
far along.
>
> I've debugged the problem, but have no solution:
Thanks for getting in where my hands fear to get dirty ... :)
>
> my $uri = Apache::URI->parse($r, $r->uri);
>
> This calls ap_parse_uri_components(), which is responsible for setting
> the scheme, hostname, user, password, port, path, etc. But, the scheme is
> not getting set, because the request line only contains "/path" or such.
>
> $uri->hostname($r->get_server_name);
> $uri->port($r->get_server_port);
>
> These work fine.
>
> print $uri->unparse;
>
> This calls ap_unparse_uri_components(). If there is a hostname but no
> scheme, ap_unparse_uri_components() will pass a null argument to
> strcasecmp, which will cause an invalid memory access and SIGSEGV. You
> can work around the problem by including $uri->scheme('http'); with the
> other accessor methods. In the long run this is probably a bug in Apache.
>
> If you read src/main/util_uri.c in Apache, you can see why commenting out
> one accessor avoids the crash.
>
> Regards,
> Jeffrey Baker
I wonder if you noticed that this code was from the Auth/Access stuff
you did for me a while back ... so I'll patch mine but you might want to
take a look at the places you are using it ...
Thanks again,
Nick