Skip to content

Commit

Permalink
fix: reset sapi response code (#964)
Browse files Browse the repository at this point in the history
* fix: reset sapi response code
It turns out that the sapi response code is NOT reset between requests by the zend engine. This resets the code for cgi-based requests.
fixes: #960

* update response header test

* fix assertion

* appears to affect workers too
  • Loading branch information
withinboredom authored Aug 11, 2024
1 parent 3ca52f5 commit d532772
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 2 deletions.
3 changes: 3 additions & 0 deletions frankenphp.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,9 @@ int frankenphp_update_server_context(
ctx = (frankenphp_server_context *)SG(server_context);
}

// It is not reset by zend engine, set it to 200.
SG(sapi_headers).http_response_code = 200;

ctx->main_request = main_request;
ctx->current_request = current_request;

Expand Down
6 changes: 6 additions & 0 deletions frankenphp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,12 @@ func testResponseHeaders(t *testing.T, opts *testOptions) {
resp := w.Result()
body, _ := io.ReadAll(resp.Body)

if i%3 != 0 {
assert.Equal(t, i+100, resp.StatusCode)
} else {
assert.Equal(t, 200, resp.StatusCode)
}

assert.Contains(t, string(body), "'X-Powered-By' => 'PH")
assert.Contains(t, string(body), "'Foo' => 'bar',")
assert.Contains(t, string(body), "'Foo2' => 'bar2',")
Expand Down
6 changes: 4 additions & 2 deletions testdata/response-headers.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
header('Foo2: bar2');
header('Invalid');
header('I: ' . ($_GET['i'] ?? 'i not set'));
http_response_code(201);

if ($_GET['i'] % 3) {
http_response_code($_GET['i'] + 100);
}

var_export(apache_response_headers());
};

0 comments on commit d532772

Please sign in to comment.