Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2021-11-29 19:02:25 +0300
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2021-12-20 12:57:43 +0300
commitc891fffde85cbcbb3f6feed2baa93a5cb2781e34 (patch)
tree2756083766812e1d1900c002db0d3f4cddf4878a /apps
parent1a6fc7f7b56107c49d926692709c777695ce7f2e (diff)
[stable23] Avoid use of iconv to get rid of unicode
Using iconv for translit depends upon server configuration, locale, and PHP version. Using htmlentities instead to have a consistent behavior independent of configuration. Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com> Co-authored-by: MichaIng <micha@dietpi.com>
Diffstat (limited to 'apps')
-rw-r--r--apps/user_ldap/lib/Access.php15
-rw-r--r--apps/user_ldap/tests/AccessTest.php9
2 files changed, 11 insertions, 13 deletions
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php
index 752f3afb520..91b11cb51f5 100644
--- a/apps/user_ldap/lib/Access.php
+++ b/apps/user_ldap/lib/Access.php
@@ -1433,12 +1433,15 @@ class Access extends LDAPUtility {
return $name;
}
- // Transliteration to ASCII
- $transliterated = @iconv('UTF-8', 'ASCII//TRANSLIT', $name);
- if ($transliterated !== false) {
- // depending on system config iconv can work or not
- $name = $transliterated;
- }
+ // Use htmlentities to get rid of accents
+ $name = htmlentities($name, ENT_NOQUOTES, 'UTF-8');
+
+ // Remove accents
+ $name = preg_replace('#&([A-Za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $name);
+ // Remove ligatures
+ $name = preg_replace('#&([A-Za-z]{2})(?:lig);#', '\1', $name);
+ // Remove unknown leftover entities
+ $name = preg_replace('#&[^;]+;#', '', $name);
// Replacements
$name = str_replace(' ', '_', $name);
diff --git a/apps/user_ldap/tests/AccessTest.php b/apps/user_ldap/tests/AccessTest.php
index 7a5ffd72a3e..4547e7e824e 100644
--- a/apps/user_ldap/tests/AccessTest.php
+++ b/apps/user_ldap/tests/AccessTest.php
@@ -689,16 +689,14 @@ class AccessTest extends TestCase {
}
public function intUsernameProvider() {
- // system dependent :-/
- $translitExpected = @iconv('UTF-8', 'ASCII//TRANSLIT', 'fränk') ? 'frank' : 'frnk';
-
return [
['alice', 'alice'],
['b/ob', 'bob'],
['charly🐬', 'charly'],
['debo rah', 'debo_rah'],
['epost@poste.test', 'epost@poste.test'],
- ['fränk', $translitExpected],
+ ['fränk', 'frank'],
+ [' UPPÉR Case/[\]^`', 'UPPER_Case'],
[' gerda ', 'gerda'],
['🕱🐵🐘🐑', null],
[
@@ -732,9 +730,6 @@ class AccessTest extends TestCase {
* @param $expected
*/
public function testSanitizeUsername($name, $expected) {
- if ($name === 'fränk' && PHP_MAJOR_VERSION > 7) {
- $this->markTestSkipped('Special chars do boom still on CI in php8');
- }
if ($expected === null) {
$this->expectException(\InvalidArgumentException::class);
}