mirror of
https://github.com/nextcloud/server.git
synced 2025-09-03 08:53:35 +00:00
fix: throw a better error if we can't get the encrypted header size
Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
parent
c7430d5cb8
commit
b0b8159d6a
5 changed files with 32 additions and 1 deletions
apps/encryption/lib/Command
lib
composer/composer
private/Files/Storage/Wrapper
public/Encryption/Exceptions
|
@ -12,6 +12,7 @@ use OC\Files\Storage\Wrapper\Encryption;
|
|||
use OC\Files\View;
|
||||
use OC\ServerNotAvailableException;
|
||||
use OCA\Encryption\Util;
|
||||
use OCP\Encryption\Exceptions\InvalidHeaderException;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\HintException;
|
||||
use OCP\IConfig;
|
||||
|
@ -196,7 +197,7 @@ class FixEncryptedVersion extends Command {
|
|||
\fclose($handle);
|
||||
|
||||
return true;
|
||||
} catch (ServerNotAvailableException $e) {
|
||||
} catch (ServerNotAvailableException|InvalidHeaderException $e) {
|
||||
// not a "bad signature" error and likely "legacy cipher" exception
|
||||
// this could mean that the file is maybe not encrypted but the encrypted version is set
|
||||
if (!$this->supportLegacy && $ignoreCorrectEncVersionCall === true) {
|
||||
|
|
|
@ -320,6 +320,7 @@ return array(
|
|||
'OCP\\DirectEditing\\IToken' => $baseDir . '/lib/public/DirectEditing/IToken.php',
|
||||
'OCP\\DirectEditing\\RegisterDirectEditorEvent' => $baseDir . '/lib/public/DirectEditing/RegisterDirectEditorEvent.php',
|
||||
'OCP\\Encryption\\Exceptions\\GenericEncryptionException' => $baseDir . '/lib/public/Encryption/Exceptions/GenericEncryptionException.php',
|
||||
'OCP\\Encryption\\Exceptions\\InvalidHeaderException' => $baseDir . '/lib/public/Encryption/Exceptions/InvalidHeaderException.php',
|
||||
'OCP\\Encryption\\IEncryptionModule' => $baseDir . '/lib/public/Encryption/IEncryptionModule.php',
|
||||
'OCP\\Encryption\\IFile' => $baseDir . '/lib/public/Encryption/IFile.php',
|
||||
'OCP\\Encryption\\IManager' => $baseDir . '/lib/public/Encryption/IManager.php',
|
||||
|
|
|
@ -361,6 +361,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
|
|||
'OCP\\DirectEditing\\IToken' => __DIR__ . '/../../..' . '/lib/public/DirectEditing/IToken.php',
|
||||
'OCP\\DirectEditing\\RegisterDirectEditorEvent' => __DIR__ . '/../../..' . '/lib/public/DirectEditing/RegisterDirectEditorEvent.php',
|
||||
'OCP\\Encryption\\Exceptions\\GenericEncryptionException' => __DIR__ . '/../../..' . '/lib/public/Encryption/Exceptions/GenericEncryptionException.php',
|
||||
'OCP\\Encryption\\Exceptions\\InvalidHeaderException' => __DIR__ . '/../../..' . '/lib/public/Encryption/Exceptions/InvalidHeaderException.php',
|
||||
'OCP\\Encryption\\IEncryptionModule' => __DIR__ . '/../../..' . '/lib/public/Encryption/IEncryptionModule.php',
|
||||
'OCP\\Encryption\\IFile' => __DIR__ . '/../../..' . '/lib/public/Encryption/IFile.php',
|
||||
'OCP\\Encryption\\IManager' => __DIR__ . '/../../..' . '/lib/public/Encryption/IManager.php',
|
||||
|
|
|
@ -18,6 +18,7 @@ use OC\Files\Storage\Common;
|
|||
use OC\Files\Storage\LocalTempFileTrait;
|
||||
use OC\Memcache\ArrayCache;
|
||||
use OCP\Cache\CappedMemoryCache;
|
||||
use OCP\Encryption\Exceptions\InvalidHeaderException;
|
||||
use OCP\Encryption\IFile;
|
||||
use OCP\Encryption\IManager;
|
||||
use OCP\Encryption\Keys\IStorage;
|
||||
|
@ -344,6 +345,16 @@ class Encryption extends Wrapper {
|
|||
if ($shouldEncrypt === true && $encryptionModule !== null) {
|
||||
$this->encryptedPaths->set($this->util->stripPartialFileExtension($path), true);
|
||||
$headerSize = $this->getHeaderSize($path);
|
||||
if ($mode === 'r' && $headerSize === 0) {
|
||||
$firstBlock = $this->readFirstBlock($path);
|
||||
if (!$firstBlock) {
|
||||
throw new InvalidHeaderException("Unable to get header block for $path");
|
||||
} elseif (!str_starts_with($firstBlock, Util::HEADER_START)) {
|
||||
throw new InvalidHeaderException("Unable to get header size for $path, file doesn't start with encryption header");
|
||||
} else {
|
||||
throw new InvalidHeaderException("Unable to get header size for $path, even though file does start with encryption header");
|
||||
}
|
||||
}
|
||||
$source = $this->storage->fopen($path, $mode);
|
||||
if (!is_resource($source)) {
|
||||
return false;
|
||||
|
|
17
lib/public/Encryption/Exceptions/InvalidHeaderException.php
Normal file
17
lib/public/Encryption/Exceptions/InvalidHeaderException.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
namespace OCP\Encryption\Exceptions;
|
||||
|
||||
use OCP\HintException;
|
||||
|
||||
/**
|
||||
* Class InvalidHeaderException
|
||||
*
|
||||
* @since 32.0.0
|
||||
*/
|
||||
class InvalidHeaderException extends HintException {
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue