fix: reset sapi response code (#964)
Some checks are pending
Lint Code Base / Lint Code Base (push) Waiting to run
Sanitizers / ${{ matrix.sanitizer }} (asan) (push) Waiting to run
Sanitizers / ${{ matrix.sanitizer }} (msan) (push) Waiting to run
Tests / tests (8.2) (push) Waiting to run
Tests / tests (8.3) (push) Waiting to run

* 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
This commit is contained in:
Rob Landers 2024-08-11 22:34:50 +02:00 committed by GitHub
parent 3ca52f5934
commit d532772355
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 13 additions and 2 deletions

View File

@ -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;

View File

@ -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',")

View File

@ -7,7 +7,9 @@ return function () {
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());
};