Compare commits

...

11 Commits

Author SHA1 Message Date
Jörg Mechnich 346e723c48
Merge 78b2082ab9 into 316acc3cc3 2024-04-29 18:25:07 +02:00
Ferdinand Thiessen 316acc3cc3
Merge pull request #44996 from nextcloud/fix/unify-access-to-forbidden-chars
fix(files): Use OCP\Util::getForbiddenFileNameChars instead of directaccess to system config
2024-04-29 18:14:06 +02:00
nextcloud-command da04b8b5f6 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2024-04-29 15:37:59 +00:00
Ferdinand Thiessen c6f3aecef1
fix(files): Use string array instead of string for forbidden characters
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2024-04-29 17:15:00 +02:00
Ferdinand Thiessen 6a281f019c fix(files): Use OCP\Util::getForbiddenFileNameChars instead of direct access to system config
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2024-04-29 17:01:32 +02:00
Côme Chilliet 147426c3ca
Merge pull request #44968 from nextcloud/fix/drop-workaround-for-obsolete-php
fix: Drop workarounds for unsupported obsolete PHP versions
2024-04-29 15:31:04 +02:00
Ferdinand Thiessen 7bd35e0ee7
Merge pull request #45029 from nextcloud/backport/44972/master
fix(unifiedSearch): Prevent broken avatars for federated users
2024-04-29 14:26:52 +02:00
nextcloud-command ff49d1939d chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2024-04-28 23:17:53 +00:00
fenn-cs a51ab473da fix(unifiedSearch): Prevent broken avatars for federated users
Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
2024-04-29 01:12:30 +02:00
Jörg Mechnich 78b2082ab9 fix: make `trusted_domains` and `overwrite.cli.url` sensitive config values
Signed-off-by: Jörg Mechnich <joerg.mechnich@gmail.com>
2024-04-28 18:17:38 +02:00
Côme Chilliet 5d1ca7e25a
fix: Drop workarounds for unsupported obsolete PHP versions
Also improved error handling in Installer.php to be type safe.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2024-04-22 16:55:42 +02:00
15 changed files with 38 additions and 40 deletions

View File

@ -52,7 +52,6 @@ use OCP\AppFramework\Http\Response;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent as ResourcesLoadAdditionalScriptsEvent;
use OCP\Constants;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
@ -253,9 +252,8 @@ class ViewController extends Controller {
$this->initialState->provideInitialState('filesSortingConfig', $filesSortingConfig);
// Forbidden file characters
/** @var string[] */
$forbiddenCharacters = $this->config->getSystemValue('forbidden_chars', []);
$this->initialState->provideInitialState('forbiddenCharacters', Constants::FILENAME_INVALID_CHARS . implode('', $forbiddenCharacters));
$forbiddenCharacters = \OCP\Util::getForbiddenFileNameChars();
$this->initialState->provideInitialState('forbiddenCharacters', $forbiddenCharacters);
$event = new LoadAdditionalScriptsEvent();
$this->eventDispatcher->dispatchTyped($event);

View File

@ -70,7 +70,7 @@ import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
import { useRenamingStore } from '../../store/renaming.ts'
import logger from '../../logger.js'
const forbiddenCharacters = loadState('files', 'forbiddenCharacters', '') as string
const forbiddenCharacters = loadState<string[]>('files', 'forbiddenCharacters', [])
export default Vue.extend({
name: 'FileEntryName',
@ -230,12 +230,10 @@ export default Vue.extend({
throw new Error(t('files', '{newName} already exists.', { newName: name }))
}
const toCheck = trimmedName.split('')
toCheck.forEach(char => {
if (forbiddenCharacters.indexOf(char) !== -1) {
throw new Error(this.t('files', '"{char}" is not allowed inside a file name.', { char }))
}
})
const char = forbiddenCharacters.find((char) => trimmedName.includes(char))
if (char) {
throw new Error(t('files', '"{char}" is not allowed inside a file name.', { char }))
}
return true
},

View File

@ -152,11 +152,6 @@ class ViewControllerTest extends TestCase {
'ownerDisplayName' => 'MyDisplayName',
]);
$this->config
->expects($this->any())
->method('getSystemValue')
->with('forbidden_chars', [])
->willReturn([]);
$this->config
->method('getUserValue')
->willReturnMap([

View File

@ -46,7 +46,11 @@
:wide="true"
@click="itemSelected(element)">
<template #icon>
<NcAvatar :user="element.user" :show-user-status="false" :hide-favorite="false" />
<NcAvatar v-if="element.isUser" :user="element.user" :show-user-status="false" />
<NcAvatar v-else
:is-no-user="true"
:display-name="element.displayName"
:show-user-status="false" />
</template>
{{ element.displayName }}
</NcButton>

View File

@ -391,6 +391,7 @@ export default {
subname: contact.emailAddresses[0] ? contact.emailAddresses[0] : '',
icon: '',
user: contact.id,
isUser: contact.isUser,
}
})
},

Binary file not shown.

Binary file not shown.

BIN
dist/files-main.js vendored

Binary file not shown.

BIN
dist/files-main.js.map vendored

Binary file not shown.

View File

@ -30,7 +30,6 @@
namespace OC\App;
use OCP\ICache;
use function libxml_disable_entity_loader;
use function simplexml_load_string;
class InfoParser {
@ -59,13 +58,7 @@ class InfoParser {
}
libxml_use_internal_errors(true);
if ((PHP_VERSION_ID < 80000)) {
$loadEntities = libxml_disable_entity_loader(false);
$xml = simplexml_load_string(file_get_contents($file));
libxml_disable_entity_loader($loadEntities);
} else {
$xml = simplexml_load_string(file_get_contents($file));
}
$xml = simplexml_load_string(file_get_contents($file));
if ($xml === false) {
libxml_clear_errors();

View File

@ -281,10 +281,6 @@ class Installer {
// Check if the signature actually matches the downloaded content
$certificate = openssl_get_publickey($app['certificate']);
$verified = (bool)openssl_verify(file_get_contents($tempFile), base64_decode($app['releases'][0]['signature']), $certificate, OPENSSL_ALGO_SHA512);
// PHP 8+ deprecates openssl_free_key and automatically destroys the key instance when it goes out of scope
if ((PHP_VERSION_ID < 80000)) {
openssl_free_key($certificate);
}
if ($verified === true) {
// Seems to match, let's proceed
@ -305,6 +301,15 @@ class Installer {
$folders = array_diff($allFiles, ['.', '..']);
$folders = array_values($folders);
if (count($folders) < 1) {
throw new \Exception(
sprintf(
'Extracted app %s has no folders',
$appId
)
);
}
if (count($folders) > 1) {
throw new \Exception(
sprintf(
@ -315,13 +320,17 @@ class Installer {
}
// Check if appinfo/info.xml has the same app ID as well
if ((PHP_VERSION_ID < 80000)) {
$loadEntities = libxml_disable_entity_loader(false);
$xml = simplexml_load_string(file_get_contents($extractDir . '/' . $folders[0] . '/appinfo/info.xml'));
libxml_disable_entity_loader($loadEntities);
} else {
$xml = simplexml_load_string(file_get_contents($extractDir . '/' . $folders[0] . '/appinfo/info.xml'));
$xml = simplexml_load_string(file_get_contents($extractDir . '/' . $folders[0] . '/appinfo/info.xml'));
if ($xml === false) {
throw new \Exception(
sprintf(
'Failed to load info.xml for app id %s',
$appId,
)
);
}
if ((string)$xml->id !== $appId) {
throw new \Exception(
sprintf(

View File

@ -64,6 +64,8 @@ class SystemConfig {
'zammad.secret' => true,
'github.client_id' => true,
'github.client_secret' => true,
'trusted_domains' => true,
'overwrite.cli.url' => true,
'log.condition' => [
'shared_secret' => true,
],

View File

@ -294,8 +294,7 @@ class OC_Image implements \OCP\IImage {
$retVal = imagegif($this->resource, $filePath);
break;
case IMAGETYPE_JPEG:
/** @psalm-suppress InvalidScalarArgument */
imageinterlace($this->resource, (PHP_VERSION_ID >= 80000 ? true : 1));
imageinterlace($this->resource, true);
$retVal = imagejpeg($this->resource, $filePath, $this->getJpegQuality());
break;
case IMAGETYPE_PNG:

View File

@ -73,7 +73,7 @@ class App {
*/
public function __construct(string $appName, array $urlParams = []) {
$runIsSetupDirectly = \OC::$server->getConfig()->getSystemValueBool('debug')
&& (PHP_VERSION_ID < 70400 || (PHP_VERSION_ID >= 70400 && !ini_get('zend.exception_ignore_args')));
&& !ini_get('zend.exception_ignore_args');
if ($runIsSetupDirectly) {
$applicationClassName = get_class($this);

View File

@ -149,8 +149,7 @@ class ImageTest extends \Test\TestCase {
$img = new \OC_Image(null, null, $config);
$img->loadFromFile(OC::$SERVERROOT.'/tests/data/testimage.jpg');
$raw = imagecreatefromstring(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg'));
/** @psalm-suppress InvalidScalarArgument */
imageinterlace($raw, (PHP_VERSION_ID >= 80000 ? true : 1));
imageinterlace($raw, true);
ob_start();
imagejpeg($raw, null, 80);
$expected = ob_get_clean();