diff --git a/sapi/fpm/fpm/fpm_status.c b/sapi/fpm/fpm/fpm_status.c index ff6ef68f3949..118be47bfeee 100644 --- a/sapi/fpm/fpm/fpm_status.c +++ b/sapi/fpm/fpm/fpm_status.c @@ -56,6 +56,9 @@ int fpm_status_export_to_zval(zval *status) int i; scoreboard_p = fpm_scoreboard_copy(NULL, 1); + if (!scoreboard_p) { + return -1; + } now_epoch = time(NULL); fpm_clock_get(&now); @@ -180,17 +183,19 @@ int fpm_status_handle_request(void) /* {{{ */ sapi_add_header_ex(ZEND_STRL("Expires: Thu, 01 Jan 1970 00:00:00 GMT"), 1, 1); sapi_add_header_ex(ZEND_STRL("Cache-Control: no-cache, no-store, must-revalidate, max-age=0"), 1, 1); PUTS("Internal error. Please review log file for errors."); + zend_string_release_ex(_GET_str, 0); return 1; } if (scoreboard_p->idle < 0 || scoreboard_p->active < 0) { - fpm_scoreboard_free_copy(scoreboard_p); zlog(ZLOG_ERROR, "[pool %s] invalid status values", scoreboard_p->pool); SG(sapi_headers).http_response_code = 500; sapi_add_header_ex(ZEND_STRL("Content-Type: text/plain"), 1, 1); sapi_add_header_ex(ZEND_STRL("Expires: Thu, 01 Jan 1970 00:00:00 GMT"), 1, 1); sapi_add_header_ex(ZEND_STRL("Cache-Control: no-cache, no-store, must-revalidate, max-age=0"), 1, 1); PUTS("Internal error. Please review log file for errors."); + zend_string_release_ex(_GET_str, 0); + fpm_scoreboard_free_copy(scoreboard_p); return 1; } @@ -201,6 +206,7 @@ int fpm_status_handle_request(void) /* {{{ */ /* handle HEAD */ if (SG(request_info).headers_only) { + zend_string_release_ex(_GET_str, 0); fpm_scoreboard_free_copy(scoreboard_p); return 1; } diff --git a/sapi/fpm/tests/status-head.phpt b/sapi/fpm/tests/status-head.phpt new file mode 100644 index 000000000000..a21fb7a7f1f8 --- /dev/null +++ b/sapi/fpm/tests/status-head.phpt @@ -0,0 +1,40 @@ +--TEST-- +FPM: Status HEAD request returns headers without body +--SKIPIF-- + +--FILE-- +start(); +$tester->expectLogStartNotices(); +$tester->request()->expectEmptyBody(); + +$response = $tester->request(uri: '/status', method: 'HEAD'); +$response->expectEmptyBody(); + +$tester->terminate(); +$tester->expectLogTerminatingNotices(); +$tester->close(); + +?> +Done +--EXPECT-- +Done +--CLEAN-- +