Skip to content

Commit d1cea96

Browse files
author
randyk
committed
Fix bug concerning 'error-notes' having no value on
errordocument redirect [supplied by Guy Albertelli II <[email protected]>]. git-svn-id: https://svn.apache.org/repos/asf/perl/modperl/trunk@436617 13f79535-47bb-0310-9956-ffa450edef68
1 parent 6239a1c commit d1cea96

File tree

4 files changed

+75
-1
lines changed

4 files changed

+75
-1
lines changed

Changes

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ Also refer to the Apache::Test changes log file, at Apache-Test/Changes
1212

1313
=item 2.0.3-dev
1414

15+
Fix bug concerning 'error-notes' having no value on
16+
errordocument redirect.
17+
[Guy Albertelli II <[email protected]>]
18+
1519
Multi-line $PerlConfig is now working [Gozer]
1620

1721
PerlOptions None was previously incorrectly reported as invalid

src/modules/perl/modperl_callback.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ int modperl_callback(pTHX_ modperl_handler_t *handler, apr_pool_t *p,
130130

131131
if (status == HTTP_INTERNAL_SERVER_ERROR) {
132132
if (r && r->notes) {
133-
apr_table_mergen(r->notes, "error-notes", SvPV_nolen(ERRSV));
133+
apr_table_merge(r->notes, "error-notes", SvPV_nolen(ERRSV));
134134
}
135135
}
136136

t/hooks/TestHooks/error.pm

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package TestHooks::error;
2+
3+
use strict;
4+
use warnings FATAL => 'all';
5+
6+
use Apache::Test;
7+
8+
use Apache2::RequestRec ();
9+
use Apache2::RequestIO ();
10+
11+
use Apache2::Const -compile => 'OK';
12+
13+
use APR::Table ();
14+
15+
sub handler {
16+
my $r = shift;
17+
my $args = $r->args();
18+
if (defined($args) && $args ne '') {
19+
$r->notes->set('error-notes' => $args);
20+
}
21+
&bomb();
22+
Apache2::Const::OK;
23+
}
24+
25+
sub fail {
26+
my $r = shift;
27+
$r->print('Error: '.$r->prev->notes->get('error-notes'));
28+
Apache2::Const::OK;
29+
}
30+
31+
1;
32+
__DATA__
33+
<NoAutoConfig>
34+
<Location /TestHooks__error>
35+
SetHandler modperl
36+
PerlResponseHandler TestHooks::error
37+
ErrorDocument 500 /TestHooks__error__fail
38+
</Location>
39+
<Location /TestHooks__error__fail>
40+
SetHandler modperl
41+
PerlResponseHandler TestHooks::error::fail
42+
</Location>
43+
</NoAutoConfig>

t/hooks/error.t

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use strict;
2+
use warnings FATAL => 'all';
3+
4+
use Apache::Test;
5+
use Apache::TestUtil;
6+
use Apache::TestRequest;
7+
8+
plan tests => 2;
9+
10+
{
11+
# this registers and performs cleanups, but we test whether the
12+
# cleanup was run only in the next sub-test
13+
my $location = "/TestHooks__error";
14+
my $expected = qr/^Error: Undefined subroutine/;
15+
my $received = GET_BODY $location;
16+
ok t_cmp($received, $expected, "error-notes set on ErrorDocument");
17+
}
18+
19+
{
20+
# this registers and performs cleanups, but we test whether the
21+
# cleanup was run only in the next sub-test
22+
my $error_seed_text = 'seed_text';
23+
my $location = "/TestHooks__error?$error_seed_text";
24+
my $expected = qr/^Error: \Q$error_seed_text\E, Undefined subroutine/;
25+
my $received = GET_BODY $location;
26+
ok t_cmp($received, $expected, "seeded error-notes set on ErrorDocument");
27+
}

0 commit comments

Comments
 (0)