diff --git a/libraries/classes/Controllers/CollationConnectionController.php b/libraries/classes/Controllers/CollationConnectionController.php index a61c7b98f8..15fdc71610 100644 --- a/libraries/classes/Controllers/CollationConnectionController.php +++ b/libraries/classes/Controllers/CollationConnectionController.php @@ -26,7 +26,7 @@ final class CollationConnectionController extends AbstractController $this->config->setUserValue( null, 'DefaultConnectionCollation', - $_POST['collation_connection'], + $request->getParsedBodyParam('collation_connection'), 'utf8mb4_unicode_ci' ); diff --git a/libraries/classes/Controllers/SchemaExportController.php b/libraries/classes/Controllers/SchemaExportController.php index 96fb90d24c..84bad61c3b 100644 --- a/libraries/classes/Controllers/SchemaExportController.php +++ b/libraries/classes/Controllers/SchemaExportController.php @@ -26,7 +26,7 @@ class SchemaExportController public function __invoke(ServerRequest $request): void { - if (! isset($_POST['export_type'])) { + if ($request->getParsedBodyParam('export_type') === null) { $errorMessage = __('Missing parameter:') . ' export_type' . MySQLDocumentation::showDocumentation('faq', 'faqmissingparameters', true) . '[br]'; diff --git a/libraries/classes/Controllers/Sql/SetValuesController.php b/libraries/classes/Controllers/Sql/SetValuesController.php index db2999df21..ec01e0d896 100644 --- a/libraries/classes/Controllers/Sql/SetValuesController.php +++ b/libraries/classes/Controllers/Sql/SetValuesController.php @@ -42,10 +42,10 @@ final class SetValuesController extends AbstractController { $this->checkUserPrivileges->getPrivileges(); - $column = $_POST['column']; - $currentValue = $_POST['curr_value']; - $fullValues = $_POST['get_full_values'] ?? false; - $whereClause = $_POST['where_clause'] ?? null; + $column = $request->getParsedBodyParam('column'); + $currentValue = $request->getParsedBodyParam('curr_value'); + $fullValues = $request->getParsedBodyParam('get_full_values', false); + $whereClause = $request->getParsedBodyParam('where_clause'); $values = $this->sql->getValuesForColumn($GLOBALS['db'], $GLOBALS['table'], $column); diff --git a/libraries/classes/Controllers/TableController.php b/libraries/classes/Controllers/TableController.php index 27f74d46c7..a2e0cefda0 100644 --- a/libraries/classes/Controllers/TableController.php +++ b/libraries/classes/Controllers/TableController.php @@ -23,13 +23,13 @@ final class TableController extends AbstractController public function __invoke(ServerRequest $request): void { - if (! isset($_POST['db'])) { + if ($request->getParsedBodyParam('db') === null) { $this->response->setRequestStatus(false); $this->response->addJSON(['message' => Message::error()]); return; } - $this->response->addJSON(['tables' => $this->dbi->getTables($_POST['db'])]); + $this->response->addJSON(['tables' => $this->dbi->getTables($request->getParsedBodyParam('db'))]); } } diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 5d98f7ddfa..c98a7a3ac3 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1010,6 +1010,11 @@ parameters: count: 1 path: libraries/classes/Controllers/AbstractController.php + - + message: "#^Parameter \\#3 \\$new_cfg_value of method PhpMyAdmin\\\\Config\\:\\:setUserValue\\(\\) expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Controllers/CollationConnectionController.php + - message: "#^Parameter \\#3 \\$new_cfg_value of method PhpMyAdmin\\\\Config\\:\\:setUserValue\\(\\) expects string, mixed given\\.$#" count: 1 @@ -1465,6 +1470,26 @@ parameters: count: 1 path: libraries/classes/Controllers/Setup/ServersController.php + - + message: "#^Parameter \\#1 \\$string of function htmlentities expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Controllers/Sql/SetValuesController.php + + - + message: "#^Parameter \\#3 \\$column of method PhpMyAdmin\\\\Sql\\:\\:getFullValuesForSetColumn\\(\\) expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Controllers/Sql/SetValuesController.php + + - + message: "#^Parameter \\#3 \\$column of method PhpMyAdmin\\\\Sql\\:\\:getValuesForColumn\\(\\) expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Controllers/Sql/SetValuesController.php + + - + message: "#^Parameter \\#4 \\$whereClause of method PhpMyAdmin\\\\Sql\\:\\:getFullValuesForSetColumn\\(\\) expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Controllers/Sql/SetValuesController.php + - message: "#^Property PhpMyAdmin\\\\SqlParser\\\\Statements\\\\SelectStatement\\:\\:\\$limit \\(PhpMyAdmin\\\\SqlParser\\\\Components\\\\Limit\\) in empty\\(\\) is not falsy\\.$#" count: 1 @@ -1755,6 +1780,11 @@ parameters: count: 1 path: libraries/classes/Controllers/Table/ZoomSearchController.php + - + message: "#^Parameter \\#1 \\$database of method PhpMyAdmin\\\\DatabaseInterface\\:\\:getTables\\(\\) expects string, mixed given\\.$#" + count: 1 + path: libraries/classes/Controllers/TableController.php + - message: "#^Parameter \\#1 \\$string of function substr expects string, mixed given\\.$#" count: 1 diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 58e1e04d37..4bcbafee9f 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -969,12 +969,9 @@ - - $_POST['collation_connection'] - - - $_POST['collation_connection'] - + + $request->getParsedBodyParam('collation_connection') + @@ -3159,18 +3156,17 @@ - - $column + $column $currentValue $whereClause - - - $column + + $column $currentValue + $fullValues $whereClause - + @@ -4466,12 +4462,9 @@ - - $_POST['db'] - - - $_POST['db'] - + + $request->getParsedBodyParam('db') + diff --git a/test/classes/Controllers/CollationConnectionControllerTest.php b/test/classes/Controllers/CollationConnectionControllerTest.php index 1b581104fd..adc699eb8c 100644 --- a/test/classes/Controllers/CollationConnectionControllerTest.php +++ b/test/classes/Controllers/CollationConnectionControllerTest.php @@ -19,7 +19,10 @@ class CollationConnectionControllerTest extends AbstractTestCase { public function testInvoke(): void { - $_POST['collation_connection'] = 'utf8mb4_general_ci'; + $request = $this->createStub(ServerRequest::class); + $request->method('getParsedBodyParam')->willReturnMap([ + ['collation_connection', null, 'utf8mb4_general_ci'], + ]); $response = $this->createMock(ResponseRenderer::class); $response->expects($this->once())->method('header') @@ -33,6 +36,6 @@ class CollationConnectionControllerTest extends AbstractTestCase $response, new Template(), $config - ))($this->createStub(ServerRequest::class)); + ))($request); } } diff --git a/test/classes/Controllers/Sql/SetValuesControllerTest.php b/test/classes/Controllers/Sql/SetValuesControllerTest.php index 2d578cefef..6f42751b04 100644 --- a/test/classes/Controllers/Sql/SetValuesControllerTest.php +++ b/test/classes/Controllers/Sql/SetValuesControllerTest.php @@ -39,21 +39,23 @@ class SetValuesControllerTest extends AbstractTestCase { $this->dummyDbi->addResult('SHOW COLUMNS FROM `cvv`.`enums` LIKE \'set\'', false); - $_POST = [ - 'ajax_request' => true, - 'db' => 'cvv', - 'table' => 'enums', - 'column' => 'set', - 'curr_value' => 'b&c', - ]; - $GLOBALS['db'] = $_POST['db']; - $GLOBALS['table'] = $_POST['table']; + $request = $this->createStub(ServerRequest::class); + $request->method('getParsedBodyParam')->willReturnMap([ + ['ajax_request', null, true], + ['db', null, 'cvv'], + ['table', null, 'enums'], + ['column', null, 'set'], + ['curr_value', null, 'b&c'], + ]); + + $GLOBALS['db'] = 'cvv'; + $GLOBALS['table'] = 'enums'; $GLOBALS['containerBuilder']->setParameter('db', $GLOBALS['db']); $GLOBALS['containerBuilder']->setParameter('table', $GLOBALS['table']); /** @var SetValuesController $sqlController */ $sqlController = $GLOBALS['containerBuilder']->get(SetValuesController::class); - $sqlController($this->createStub(ServerRequest::class)); + $sqlController($request); $this->assertResponseWasNotSuccessfull(); @@ -87,21 +89,23 @@ class SetValuesControllerTest extends AbstractTestCase ] ); - $_POST = [ - 'ajax_request' => true, - 'db' => 'cvv', - 'table' => 'enums', - 'column' => 'set', - 'curr_value' => 'b&c', - ]; - $GLOBALS['db'] = $_POST['db']; - $GLOBALS['table'] = $_POST['table']; + $request = $this->createStub(ServerRequest::class); + $request->method('getParsedBodyParam')->willReturnMap([ + ['ajax_request', null, true], + ['db', null, 'cvv'], + ['table', null, 'enums'], + ['column', null, 'set'], + ['curr_value', null, 'b&c'], + ]); + + $GLOBALS['db'] = 'cvv'; + $GLOBALS['table'] = 'enums'; $GLOBALS['containerBuilder']->setParameter('db', $GLOBALS['db']); $GLOBALS['containerBuilder']->setParameter('table', $GLOBALS['table']); /** @var SetValuesController $sqlController */ $sqlController = $GLOBALS['containerBuilder']->get(SetValuesController::class); - $sqlController($this->createStub(ServerRequest::class)); + $sqlController($request); $this->assertResponseWasSuccessfull();