Browse Source
Allow 4byte unicode filenames on supported platforms
Signed-off-by: Robin Appelman <robin@icewind.nl>
pull/1820/head
Robin Appelman
9 years ago
No known key found for this signature in database
GPG Key ID: 425003AC385454C5
3 changed files with
24 additions and
3 deletions
-
lib/private/DB/Connection.php
-
lib/private/Files/View.php
-
lib/public/IDBConnection.php
|
|
|
@ -33,6 +33,7 @@ use Doctrine\DBAL\Driver; |
|
|
|
use Doctrine\DBAL\Configuration; |
|
|
|
use Doctrine\DBAL\Cache\QueryCacheProfile; |
|
|
|
use Doctrine\Common\EventManager; |
|
|
|
use Doctrine\DBAL\Platforms\MySqlPlatform; |
|
|
|
use OC\DB\QueryBuilder\QueryBuilder; |
|
|
|
use OCP\DB\QueryBuilder\IQueryBuilder; |
|
|
|
use OCP\IDBConnection; |
|
|
|
@ -402,4 +403,14 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection { |
|
|
|
public function escapeLikeParameter($param) { |
|
|
|
return addcslashes($param, '\\_%'); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Check whether or not the current database support 4byte wide unicode |
|
|
|
* |
|
|
|
* @return bool |
|
|
|
* @since 9.2.0 |
|
|
|
*/ |
|
|
|
public function supports4ByteText() { |
|
|
|
return ! ($this->getDatabasePlatform() instanceof MySqlPlatform && $this->getParams()['charset'] !== 'utf8mb4'); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1806,13 +1806,15 @@ class View { |
|
|
|
throw new InvalidPathException($l10n->t('Dot files are not allowed')); |
|
|
|
} |
|
|
|
|
|
|
|
// verify database - e.g. mysql only 3-byte chars
|
|
|
|
if (preg_match('%(?: |
|
|
|
if (!\OC::$server->getDatabaseConnection()->supports4ByteText()) { |
|
|
|
// verify database - e.g. mysql only 3-byte chars
|
|
|
|
if (preg_match('%(?: |
|
|
|
\xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
|
|
|
|
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
|
|
|
|
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
|
|
|
|
)%xs', $fileName)) { |
|
|
|
throw new InvalidPathException($l10n->t('4-byte characters are not supported in file names')); |
|
|
|
throw new InvalidPathException($l10n->t('4-byte characters are not supported in file names')); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
@ -251,4 +251,12 @@ interface IDBConnection { |
|
|
|
* @since 9.0.0 |
|
|
|
*/ |
|
|
|
public function escapeLikeParameter($param); |
|
|
|
|
|
|
|
/** |
|
|
|
* Check whether or not the current database support 4byte wide unicode |
|
|
|
* |
|
|
|
* @return bool |
|
|
|
* @since 9.2.0 |
|
|
|
*/ |
|
|
|
public function supports4ByteText(); |
|
|
|
} |