This works, separate file /tmp/test.pl:

  use Safe;

  my($compartment) = new Safe;
  $compartment->permit(qw(:browse));
  $compartment->reval("print \"gnu\n\";");

  if($@)
  {
    die $@;
  }

  print "\n\n";

(Script prints "gnu")

This does not work, in perl-handler Handler.pm:

  [...]

  use Safe;

  sub handler
  {
    my $r = shift;

    return DECLINED unless $r->content_type() eq 'text/html';

    [...]

    print "Content-type: text/plain\n\n";
 
    my($compartment) = new Safe;
    $compartment->permit(qw(:browse));
    $compartment->reval("print \"gnu\n\";");

    if($@)
    {
      die $@;
    }

    [...]

Request results in segfault:

  [Thu Jul 24 12:59:56 2003] [notice] child pid 3003 exit signal 
  Segmentation fault (11)

If I comment out $compartment->reval(), then the process does not 
segfault. 

Since Safe works outside mod_perl, I'm guessing there's something with the 
mod_perl environment that messes things up. 

I have run the rest of the setup for several months now without noticing
any other ill effects, so I don't think it is a bad installation of
something. Setup is:

  Gentoo linux
  perl 5.8.0
  apache 1.3.27
  mod_perl 1.27

Ideas anyone?

  // Joel

Reply via email to