Skip to content

Commit 1bad701

Browse files
committed
Merge branch '4.0' into 'main'
2 parents 39bc013 + 1504ff1 commit 1bad701

File tree

5 files changed

+35
-4
lines changed

5 files changed

+35
-4
lines changed

phpmyfaq/src/phpMyFAQ/Controller/Administration/Api/UserController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ public function addUser(Request $request): JsonResponse
317317
$errorMessage = [];
318318

319319
$userName = Filter::filterVar($data->userName, FILTER_SANITIZE_SPECIAL_CHARS);
320-
$userRealName = Filter::filterVar($data->realName, FILTER_SANITIZE_SPECIAL_CHARS);
320+
$userRealName = trim(strip_tags((string) $data->realName));
321321
$userEmail = Filter::filterVar($data->email, FILTER_VALIDATE_EMAIL);
322322
$automaticPassword = Filter::filterVar($data->automaticPassword, FILTER_VALIDATE_BOOLEAN);
323323
$userPassword = Filter::filterVar($data->password, FILTER_SANITIZE_SPECIAL_CHARS);
@@ -391,7 +391,7 @@ public function editUser(Request $request): JsonResponse
391391
}
392392

393393
$userData = [];
394-
$userData['display_name'] = Filter::filterVar($data->display_name, FILTER_SANITIZE_SPECIAL_CHARS);
394+
$userData['display_name'] = trim(strip_tags((string) $data->display_name));
395395
$userData['email'] = Filter::filterVar($data->email, FILTER_VALIDATE_EMAIL);
396396
$userData['last_modified'] = Filter::filterVar($data->last_modified, FILTER_SANITIZE_SPECIAL_CHARS);
397397
$userStatus = Filter::filterVar($data->user_status, FILTER_SANITIZE_SPECIAL_CHARS, 'active');

phpmyfaq/src/phpMyFAQ/Controller/Frontend/RegistrationController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function create(Request $request): JsonResponse
4040

4141
$data = json_decode($request->getContent(), false, 512, JSON_THROW_ON_ERROR);
4242

43-
$fullName = trim((string) Filter::filterVar($data->realname, FILTER_SANITIZE_SPECIAL_CHARS));
43+
$fullName = trim(strip_tags((string) $data->realname));
4444
$userName = trim((string) Filter::filterVar($data->name, FILTER_SANITIZE_SPECIAL_CHARS));
4545
$email = trim((string) Filter::filterVar($data->email, FILTER_VALIDATE_EMAIL));
4646
$isVisible = Filter::filterVar($data->isVisible, FILTER_SANITIZE_SPECIAL_CHARS) ?? false;

phpmyfaq/src/phpMyFAQ/Controller/Frontend/UserController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function updateData(Request $request): JsonResponse
5454
}
5555

5656
$userId = Filter::filterVar($data->userid, FILTER_VALIDATE_INT);
57-
$userName = trim((string) Filter::filterVar($data->name, FILTER_SANITIZE_SPECIAL_CHARS));
57+
$userName = trim(strip_tags((string) $data->name));
5858
$email = Filter::filterVar($data->email, FILTER_VALIDATE_EMAIL);
5959
$isVisible = Filter::filterVar($data->{'is_visible'}, FILTER_SANITIZE_SPECIAL_CHARS);
6060
$password = trim((string) Filter::filterVar($data->faqpassword, FILTER_SANITIZE_SPECIAL_CHARS));

phpmyfaq/src/phpMyFAQ/User/UserData.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,15 @@ public function get(mixed $field): mixed
8080

8181
$array = $this->configuration->getDb()->fetchArray($res);
8282

83+
// Decode HTML entities in display_name for backward compatibility
84+
if (isset($array['display_name'])) {
85+
$array['display_name'] = html_entity_decode(
86+
$array['display_name'],
87+
ENT_QUOTES | ENT_HTML5 | ENT_SUBSTITUTE,
88+
'UTF-8',
89+
);
90+
}
91+
8392
return $singleReturn && $field != '*' ? $array[$field] : $array;
8493
}
8594

tests/phpMyFAQ/User/UserDataTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,26 @@ public function testEmailExistsReturnsFalseForEmptyEmail(): void
118118
$result = $this->userData->emailExists('');
119119
$this->assertFalse($result);
120120
}
121+
122+
public function testGetDecodesHtmlEntitiesInDisplayName(): void
123+
{
124+
$this->database->method('query')->willReturn(true);
125+
$this->database->method('numRows')->willReturn(1);
126+
$this->database->method('fetchArray')->willReturn(['display_name' => 'Jürgen']);
127+
128+
$this->userData->load(1);
129+
$result = $this->userData->get('display_name');
130+
$this->assertEquals('Jürgen', $result);
131+
}
132+
133+
public function testGetPreservesPlainUtf8InDisplayName(): void
134+
{
135+
$this->database->method('query')->willReturn(true);
136+
$this->database->method('numRows')->willReturn(1);
137+
$this->database->method('fetchArray')->willReturn(['display_name' => 'Jürgen']);
138+
139+
$this->userData->load(1);
140+
$result = $this->userData->get('display_name');
141+
$this->assertEquals('Jürgen', $result);
142+
}
121143
}

0 commit comments

Comments
 (0)