Re: [MP2] : REDIRECT_ERROR_NOTES not set on errordocument redirect

[prev] [thread] [next] [Date index for 2005/05/13]

From: Stas Bekman
Subject: Re: [MP2] : REDIRECT_ERROR_NOTES not set on errordocument redirect
Date: 05:17 on 13 May 2005
Mark wrote:
> Stas Bekman wrote:
> 
>> Mark wrote:
>>
>>> -------------8<---------- Start Bug Report ------------8<----------
>>> 1. Problem Description:
>>>
>>> $ENV{REDIRECT_ERROR_NOTES} not working with MP2
>>>
>>> Using latest everything (modperl 2 RC5).
>>>
>>>
>>> To illustrate, I simply configure Apache with an errordocument:
>>>
>>>    ErrorDocument 500 /cgi/printenv
>>>
>>> I have a perl-scripts configured like this:
>>>
>>>   <Directory "/usr/local/apache2/perl">
>>>     Options ExecCGI
>>>     SetHandler perl-script
>>>     PerlResponseHandler ModPerl::Registry
>>>     PerlOptions +ParseHeaders
>>>   </Directory>
>>>
>>> And a script the generates an error:
>>>
>>>   #/usr/bin/perl
>>>   barf();
>>>
>>>
>>> The errordocument 'printenv' output shows REDIRECT_ERROR_NOTES empty.
>>>
>>> When the identical barf script is run under CGI (script-alias), 
>>> REDIRECT_ERROR_NOTES
>>> has an error message.
>>>
>>>
>>> I fooled around with more complex examples, accessing ARP table 
>>> 'error-notes' and
>>> that is also empty.
>>
>>
>>
>> because you are in the sub request. the value is set in $r->main 
>> 'error-notes' table. I wonder why the sub-request doesn't see it.
>>
>> Also I wonder if we should adjust in ModPerl::RegistryCooker:
>>
>>  sub log_error {
>>      my($self, $msg) = @_;
>>      my $class = ref $self;
>>
>> -    $self->{REQ}->log_error($msg);
>> -    $self->{REQ}->notes->set('error-notes' => $msg);
>> +    $self->{REQ}->log_rerror($msg);
>>      $@{$self->{URI}} = $msg;
>>  }
>>
>> which is supposed to do that same in one call. Any difference with the 
>> above change?
> 
> 
> OK, I installed RC6 (no change with that) and poked around a little more.
> 
> $r->prev->notes->get('error-notes') is definitely empty in the 
> errordocument
> handler, despite being set in ModPerl::RegistryCooker as shown above.
> 
> However, as a test, I changed 'error-notes' to 'error-notice' in
> RegistryCooker::log_error, and voila $r->prev->notes->get('error-notice')
> does contain the proper error message.
> 
> This suggests 'error-notes' is being wiped out (re-initialized?) somewhere
> after RegistryCooker.  Someone with more knowledge than I can probably
> guess where this might be happening?

Could it possibly come from here?

src/modules/perl/modperl_callback.c

     if (status == HTTP_INTERNAL_SERVER_ERROR) {
         if (r && r->notes) {
             apr_table_set(r->notes, "error-notes", SvPV_nolen(ERRSV));
         }
     }

And we should check whether error-notes is already set and append the 
error instead?

        -- 
        __________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@xxxxxx.xxx http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Re: [MP2] : REDIRECT_ERROR_NOTES not set on errordocument redirect
Stas Bekman 05:17 on 13 May 2005

Generated at 15:53 on 25 May 2005 by mariachi v0.52