Skip to content

Commit 97d3f21

Browse files
authored
Merge pull request #30347 from nextcloud/backport/29965/stable22
[stable22] [stable23] Avoid use of iconv to get rid of unicode
2 parents 819ea39 + c891fff commit 97d3f21

File tree

2 files changed

+11
-13
lines changed

2 files changed

+11
-13
lines changed

apps/user_ldap/lib/Access.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,12 +1433,15 @@ public function sanitizeUsername($name) {
14331433
return $name;
14341434
}
14351435

1436-
// Transliteration to ASCII
1437-
$transliterated = @iconv('UTF-8', 'ASCII//TRANSLIT', $name);
1438-
if ($transliterated !== false) {
1439-
// depending on system config iconv can work or not
1440-
$name = $transliterated;
1441-
}
1436+
// Use htmlentities to get rid of accents
1437+
$name = htmlentities($name, ENT_NOQUOTES, 'UTF-8');
1438+
1439+
// Remove accents
1440+
$name = preg_replace('#&([A-Za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $name);
1441+
// Remove ligatures
1442+
$name = preg_replace('#&([A-Za-z]{2})(?:lig);#', '\1', $name);
1443+
// Remove unknown leftover entities
1444+
$name = preg_replace('#&[^;]+;#', '', $name);
14421445

14431446
// Replacements
14441447
$name = str_replace(' ', '_', $name);

apps/user_ldap/tests/AccessTest.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -689,16 +689,14 @@ public function testFetchListOfGroupsKnown() {
689689
}
690690

691691
public function intUsernameProvider() {
692-
// system dependent :-/
693-
$translitExpected = @iconv('UTF-8', 'ASCII//TRANSLIT', 'fränk') ? 'frank' : 'frnk';
694-
695692
return [
696693
['alice', 'alice'],
697694
['b/ob', 'bob'],
698695
['charly🐬', 'charly'],
699696
['debo rah', 'debo_rah'],
700697
['epost@poste.test', 'epost@poste.test'],
701-
['fränk', $translitExpected],
698+
['fränk', 'frank'],
699+
[' UPPÉR Case/[\]^`', 'UPPER_Case'],
702700
[' gerda ', 'gerda'],
703701
['🕱🐵🐘🐑', null],
704702
[
@@ -732,9 +730,6 @@ public function groupIDCandidateProvider() {
732730
* @param $expected
733731
*/
734732
public function testSanitizeUsername($name, $expected) {
735-
if ($name === 'fränk' && PHP_MAJOR_VERSION > 7) {
736-
$this->markTestSkipped('Special chars do boom still on CI in php8');
737-
}
738733
if ($expected === null) {
739734
$this->expectException(\InvalidArgumentException::class);
740735
}

0 commit comments

Comments
 (0)