@@ -115,7 +115,27 @@ my @testcases = (
115115 [ ],
116116 [ ' Test-Header' => ' foo' ],
117117 ],
118+ # 500 error test - invalid regex pattern
119+ [
120+ " Header edit Test-Header (unclosed bar" , # malformed regex (unmatched parenthesis)
121+ [ ],
122+ [ ],
123+ 500,
124+ ],
118125);
126+ if (have_min_apache_version(' 2.4.68' )) {
127+ push (@testcases ,
128+ (
129+ # edit*
130+ [
131+ " Header set Test-Header \" expr=%{base64:%{file:$htaccess }}\" " , # no file() in htaccess
132+ [ ],
133+ [ ],
134+ 500,
135+ ],
136+ )
137+ );
138+ }
119139if (have_min_apache_version(' 2.5.1' )) {
120140 push (@testcases ,
121141 (
@@ -297,6 +317,9 @@ sub test_header2 {
297317 my @test = @_ ;
298318 my $h = HTTP::Headers-> new;
299319
320+ # Extract expected status code (default to 200 if not specified)
321+ my $expected_status = $test [0][3] // 200;
322+
300323 print " \n\n\n " ;
301324 for (my $i = 0; $i < scalar @{$test [0][1]}; $i += 2) {
302325 print " Header sent n°" . $i /2 . " :\n " ;
@@ -312,22 +335,30 @@ sub test_header2 {
312335 # #
313336 my $r = HTTP::Request-> new(' GET' , " http://$hostport /modules/headers/htaccess/" , $h );
314337 my $res = $ua -> request($r );
315- ok t_cmp($res -> code, 200 , " Checking return code is '200 '" );
338+ ok t_cmp($res -> code, $expected_status , " Checking return code is '$expected_status '" );
316339
317- my $isok = 1;
318- for (my $i = 0; $i < scalar @{$test [0][2]}; $i += 2) {
319- print " \n " ;
320- print " Header received n°" . $i /2 . " :\n " ;
321- print " header: " . $test [0][2][$i ] . " \n " ;
322- print " expected: " . $test [0][2][$i +1] . " \n " ;
323- if ($res -> header($test [0][2][$i ])) {
324- print " received: " . $res -> header($test [0][2][$i ]) . " \n " ;
325- } else {
326- print " received: <undefined>\n " ;
340+ # Only validate headers if we expect a successful response
341+ if ($expected_status == 200) {
342+ my $isok = 1;
343+ for (my $i = 0; $i < scalar @{$test [0][2]}; $i += 2) {
344+ print " \n " ;
345+ print " Header received n°" . $i /2 . " :\n " ;
346+ print " header: " . $test [0][2][$i ] . " \n " ;
347+ print " expected: " . $test [0][2][$i +1] . " \n " ;
348+ if ($res -> header($test [0][2][$i ])) {
349+ print " received: " . $res -> header($test [0][2][$i ]) . " \n " ;
350+ } else {
351+ print " received: <undefined>\n " ;
352+ }
353+ $isok = $isok && $res -> header($test [0][2][$i ]) && $test [0][2][$i +1] eq $res -> header($test [0][2][$i ]);
327354 }
328- $isok = $isok && $res -> header($test [0][2][$i ]) && $test [0][2][$i +1] eq $res -> header($test [0][2][$i ]);
329- }
330- print " \n Response received is:\n " . $res -> as_string;
355+ print " \n Response received is:\n " . $res -> as_string;
331356
332- ok $isok ;
357+ ok $isok ;
358+ } else {
359+ # For error responses, skip header validation
360+ print " \n Expected error response received (status $expected_status )\n " ;
361+ print " Response received is:\n " . $res -> as_string;
362+ ok 1;
363+ }
333364}
0 commit comments