diff --git a/libraries/classes/Header.php b/libraries/classes/Header.php index 558ad289c1..07d05404d4 100644 --- a/libraries/classes/Header.php +++ b/libraries/classes/Header.php @@ -19,6 +19,7 @@ use function htmlspecialchars; use function implode; use function ini_get; use function is_bool; +use function is_string; use function sprintf; use function strlen; use function strtolower; @@ -440,7 +441,7 @@ class Header if (! empty($GLOBALS['message'])) { $message = $GLOBALS['message']; unset($GLOBALS['message']); - } elseif (! empty($_REQUEST['message'])) { + } elseif (! empty($_REQUEST['message']) && is_string($_REQUEST['message'])) { $message = $_REQUEST['message']; } diff --git a/psalm-baseline.xml b/psalm-baseline.xml index d3178fdab2..3a6bac92e6 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -7433,9 +7433,6 @@ $pftext $value - - $message - $menu diff --git a/test/classes/HeaderTest.php b/test/classes/HeaderTest.php index d174a245c0..51b1570f1b 100644 --- a/test/classes/HeaderTest.php +++ b/test/classes/HeaderTest.php @@ -10,6 +10,7 @@ use PhpMyAdmin\Header; use ReflectionProperty; use function gmdate; +use function sprintf; use const DATE_RFC1123; use const PHP_VERSION_ID; @@ -30,11 +31,8 @@ class HeaderTest extends AbstractTestCase parent::setLanguage(); $GLOBALS['server'] = 0; - $GLOBALS['message'] = 'phpmyadminmessage'; $GLOBALS['PMA_PHP_SELF'] = Core::getenv('PHP_SELF'); $GLOBALS['server'] = 'server'; - $GLOBALS['db'] = 'db'; - $GLOBALS['table'] = ''; parent::setGlobalConfig(); $GLOBALS['cfg']['Servers'] = []; $GLOBALS['cfg']['Server']['DisableIS'] = false; @@ -93,12 +91,60 @@ class HeaderTest extends AbstractTestCase } /** - * Test for Get Message + * @param array|string|null $param + * + * @dataProvider getMessageProvider */ - public function testGetMessage(): void + public function testGetMessage(string $expected, ?string $current, $param, bool $hasSqlQuery): void { - $header = new Header(); - self::assertStringContainsString('phpmyadminmessage', $header->getMessage()); + $GLOBALS['server'] = 1; + $GLOBALS['db'] = 'test_db'; + $GLOBALS['table'] = 'test_table'; + $GLOBALS['sql_query'] = $hasSqlQuery ? 'SELECT 1' : ''; + $GLOBALS['message'] = $current; + $_REQUEST['message'] = $param; + self::assertSame($expected, (new Header())->getMessage()); + } + + /** @return iterable|string|null, bool}> */ + public static function getMessageProvider(): iterable + { + $message = ''; + + $messageWithSqlQuery = '
' . "\n" + . '
' + . '
' . "\n" . 'SELECT 1' . "\n"
+            . '
' + . '
' + . '
Edit inline ] [ Edit ] [ Explain SQL' + . ' ] [ Create PHP code ]' + . ' [ Refresh ]
'; + + yield ['', null, null, false]; + yield ['', null, null, true]; + yield ['', null, '', false]; + yield ['', null, [], false]; + yield ['', null, ['message'], false]; + + yield [sprintf($message, 'Request'), null, 'Request', false]; + yield [sprintf($message, 'Current'), 'Current', null, false]; + yield [sprintf($message, 'Current'), 'Current', 'Request', false]; + + yield [sprintf($messageWithSqlQuery, 'Current'), 'Current', null, true]; + yield [ + sprintf($messageWithSqlQuery, 'A <em>B</em> C D'), + null, + 'A B [em]C[/em] D', + true, + ]; } /**