Skip to content

Commit 86ea503

Browse files
committed
Merge branch 'QA_5_2'
Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
2 parents 835fc27 + 6875680 commit 86ea503

8 files changed

Lines changed: 29 additions & 19 deletions

File tree

ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ phpMyAdmin - ChangeLog
4444
- issue #18212 Fix Query Builder doesn't replace a table name with it's alias in the `WHERE` block
4545
- issue Keep the criteria box collapsed by the user when un-checking the criteria checkbox
4646
- issue Fix colspan for actions column on database table list
47+
- issue Fix double encoding on User Groups pages
4748

4849
5.2.1 (2023-02-07)
4950
- issue #17522 Fix case where the routes cache file is invalid

js/src/server/user_groups.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import $ from 'jquery';
22
import { AJAX } from '../modules/ajax.ts';
3-
import { escapeHtml } from '../modules/functions/escape.ts';
43

54
/**
65
* @fileoverview Javascript functions used in server user groups page
@@ -26,7 +25,7 @@ AJAX.registerOnload('server/user_groups.js', function () {
2625
const userGroupName = $(event.relatedTarget).data('user-group');
2726
(this.querySelector('.modal-body') as HTMLDivElement).innerText = window.sprintf(
2827
window.Messages.strDropUserGroupWarning,
29-
escapeHtml(userGroupName)
28+
userGroupName
3029
);
3130
});
3231

libraries/classes/ConfigStorage/UserGroups.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static function getHtmlForUserGroupsTable(ConfigurableMenusFeature $confi
9393

9494
foreach ($userGroups as $groupName => $tabs) {
9595
$userGroupVal = [];
96-
$userGroupVal['name'] = htmlspecialchars((string) $groupName);
96+
$userGroupVal['name'] = $groupName;
9797
$userGroupVal['serverTab'] = self::getAllowedTabNames($tabs, 'server');
9898
$userGroupVal['dbTab'] = self::getAllowedTabNames($tabs, 'db');
9999
$userGroupVal['tableTab'] = self::getAllowedTabNames($tabs, 'table');

psalm-baseline.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -862,9 +862,6 @@
862862
<code>$tabs</code>
863863
<code>$tabs</code>
864864
</PossiblyNullIterator>
865-
<RedundantCastGivenDocblockType>
866-
<code>(string) $groupName</code>
867-
</RedundantCastGivenDocblockType>
868865
</file>
869866
<file src="libraries/classes/Controllers/AbstractController.php">
870867
<InvalidArrayOffset>

templates/server/user_groups/edit_user_groups.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{% if user_group == null %}
33
<h2>{{ 'Add user group'|trans }}</h2>
44
{% else %}
5-
<h2>{{ 'Edit user group: \'%s\''|trans|format(edit_user_group_special_chars) }}</h2>
5+
<h2>{{ 'Edit user group: \'%s\''|trans|format(edit_user_group_special_chars)|raw }}</h2>
66
{% endif %}
77

88
<form action="{{ user_group_url|raw }}" method="post" class="card disableAjax">

templates/server/user_groups/user_listings.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<h2>{{ 'Users of \'%s\' user group'|trans|format(user_group_special_chars) }}</h2>
1+
<h2>{{ 'Users of \'%s\' user group'|trans|format(user_group_special_chars)|raw }}</h2>
22
{% if num_rows == 0 %}
33
<p>{% trans 'No users were found belonging to this user group.' %}</p>
44
{% else %}

test/classes/ConfigStorage/UserGroupsTest.php

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
use PhpMyAdmin\Dbal\ResultInterface;
1313
use PhpMyAdmin\Dbal\TableName;
1414
use PhpMyAdmin\Tests\AbstractTestCase;
15+
use PhpMyAdmin\Tests\Stubs\DbiDummy;
1516
use PhpMyAdmin\Tests\Stubs\DummyResult;
1617
use PhpMyAdmin\Url;
1718

18-
use function htmlspecialchars;
19-
2019
/** @covers \PhpMyAdmin\ConfigStorage\UserGroups */
2120
class UserGroupsTest extends AbstractTestCase
2221
{
@@ -75,16 +74,16 @@ public function testGetHtmlForUserGroupsTableWithNoUserGroups(): void
7574
public function testGetHtmlForUserGroupsTableWithUserGroups(): void
7675
{
7776
$html = UserGroups::getHtmlForUserGroupsTable($this->configurableMenusFeature);
78-
$this->assertStringContainsString('<td>usergroup</td>', $html);
77+
$this->assertStringContainsString('<td>user&lt;br&gt;group</td>', $html);
7978
$urlTag = '<a class="" href="' . Url::getFromRoute('/server/user-groups') . '" data-post="'
80-
. Url::getCommon(['viewUsers' => 1, 'userGroup' => htmlspecialchars('usergroup')], '');
79+
. Url::getCommon(['viewUsers' => 1, 'userGroup' => 'user<br>group'], '');
8180
$this->assertStringContainsString($urlTag, $html);
8281
$urlTag = '<a class="" href="' . Url::getFromRoute('/server/user-groups') . '" data-post="'
83-
. Url::getCommon(['editUserGroup' => 1, 'userGroup' => htmlspecialchars('usergroup')], '');
82+
. Url::getCommon(['editUserGroup' => 1, 'userGroup' => 'user<br>group'], '');
8483
$this->assertStringContainsString($urlTag, $html);
8584
$this->assertStringContainsString(
8685
'<button type="button" class="btn btn-link" data-bs-toggle="modal"'
87-
. ' data-bs-target="#deleteUserGroupModal" data-user-group="usergroup">',
86+
. ' data-bs-target="#deleteUserGroupModal" data-user-group="user&lt;br&gt;group">',
8887
$html,
8988
);
9089
}
@@ -121,7 +120,7 @@ public function testGetHtmlToEditUserGroup(): void
121120

122121
$resultStub = $this->createMock(DummyResult::class);
123122

124-
$expectedQuery = 'SELECT * FROM `pmadb`.`usergroups` WHERE `usergroup`=\'ug\'';
123+
$expectedQuery = 'SELECT * FROM `pmadb`.`usergroups` WHERE `usergroup`=\'user<br>group\'';
125124
$dbi = $this->getMockBuilder(DatabaseInterface::class)
126125
->disableOriginalConstructor()
127126
->getMock();
@@ -132,16 +131,17 @@ public function testGetHtmlToEditUserGroup(): void
132131
$resultStub->expects($this->exactly(1))
133132
->method('getIterator')
134133
->will($this->returnCallback(static function (): Generator {
135-
yield from [['usergroup' => 'ug', 'tab' => 'server_sql', 'allowed' => 'Y']];
134+
yield from [['usergroup' => 'user<br>group', 'tab' => 'server_sql', 'allowed' => 'Y']];
136135
}));
137136
$dbi->expects($this->any())->method('quoteString')
138137
->will($this->returnCallback(static fn (string $string): string => "'" . $string . "'"));
139138

140139
$GLOBALS['dbi'] = $dbi;
141140

142141
// editing a user group
143-
$html = UserGroups::getHtmlToEditUserGroup($this->configurableMenusFeature, 'ug');
144-
$this->assertStringContainsString('<input type="hidden" name="userGroup" value="ug"', $html);
142+
$html = UserGroups::getHtmlToEditUserGroup($this->configurableMenusFeature, 'user<br>group');
143+
$this->assertStringContainsString('Edit user group: \'user&lt;br&gt;group\'', $html);
144+
$this->assertStringContainsString('<input type="hidden" name="userGroup" value="user&lt;br&gt;group"', $html);
145145
$this->assertStringContainsString('<input type="hidden" name="editUserGroupSubmit" value="1"', $html);
146146
$this->assertStringContainsString('<input type="hidden" name="editUserGroupSubmit" value="1"', $html);
147147
$this->assertStringContainsString(
@@ -155,4 +155,17 @@ public function testGetHtmlToEditUserGroup(): void
155155
$html,
156156
);
157157
}
158+
159+
public function testGetHtmlForListingUsersOfAGroupWithNoUsers(): void
160+
{
161+
$dummyDbi = new DbiDummy();
162+
$dbi = DatabaseInterface::load($dummyDbi);
163+
$GLOBALS['dbi'] = $dbi;
164+
165+
$dummyDbi->addResult('SELECT `username` FROM `pmadb`.`users` WHERE `usergroup`=\'user<br>group\'', []);
166+
167+
$output = UserGroups::getHtmlForListingUsersofAGroup($this->configurableMenusFeature, 'user<br>group');
168+
$this->assertStringContainsString('Users of \'user&lt;br&gt;group\' user group', $output);
169+
$this->assertStringContainsString('No users were found belonging to this user group.', $output);
170+
}
158171
}

test/classes/Stubs/DbiDummy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1793,7 +1793,7 @@ private function init(): void
17931793
[
17941794
'query' => 'SELECT * FROM `pmadb`.`usergroups` ORDER BY `usergroup` ASC',
17951795
'columns' => ['usergroup', 'tab', 'allowed'],
1796-
'result' => [['usergroup', 'server_sql', 'Y']],
1796+
'result' => [['user<br>group', 'server_sql', 'Y']],
17971797
],
17981798
[
17991799
'query' => 'DESCRIBE `test_table`',

0 commit comments

Comments
 (0)