Files
Ferdinand Thiessen 6baa59a3d0 fix(encryption): keep version and size in sync for files not in the cache
A file written through a stream has no file cache entry until the caller
scans it, but both inputs of the block signature are read from that entry:
stream_close() can only bump `encryptedVersion` if the entry exists, while
the reader got version 0 instead of the 1 the blocks were signed with, and
filesize() returned the wrapped storage's ciphertext size, which moved the
'end' position marker to the wrong block. Reading such a file back - e.g.
moving a part file to a target on another storage - failed with
"Bad Signature".

Treat a missing version as 1 on read, and let the size tracked while
writing win over the wrapped storage's size even without a cache entry.
Also stop reading `encryptedVersion` off a missing source entry when
updating the encrypted version of a copy or rename.

Assisted-by: ClaudeCode:claude-opus-5
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-09-15 18:19:28 +02:00

300 lines
8.3 KiB
YAML

# SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-FileCopyrightText: 2015-2016 ownCloud, Inc.
# SPDX-License-Identifier: AGPL-3.0-only
default:
autoload:
'': "%paths.base%/../features/bootstrap"
formatters:
junit:
output_path: '%paths.base%/../output'
pretty:
output_styles:
comment: [ 'bright-blue' ]
suites:
default:
paths:
- "%paths.base%/../features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
- CommentsContext:
baseUrl: http://localhost:8080
- TagsContext:
baseUrl: http://localhost:8080
- CardDavContext:
baseUrl: http://localhost:8080
- CalDavContext:
baseUrl: http://localhost:8080
- ChecksumsContext:
baseUrl: http://localhost:8080
- CommandLineContext:
baseUrl: http://localhost:8080
ocPath: ../../
comments:
paths:
- "%paths.base%/../comments_features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
- CommentsContext:
baseUrl: http://localhost:8080
- TagsContext:
baseUrl: http://localhost:8080
- CardDavContext:
baseUrl: http://localhost:8080
- CalDavContext:
baseUrl: http://localhost:8080
- ChecksumsContext:
baseUrl: http://localhost:8080
- CommandLineContext:
baseUrl: http://localhost:8080
ocPath: ../../
dav:
paths:
- "%paths.base%/../dav_features"
contexts:
- DavFeatureContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
- CommentsContext:
baseUrl: http://localhost:8080
- TagsContext:
baseUrl: http://localhost:8080
- CardDavContext:
baseUrl: http://localhost:8080
- CalDavContext:
baseUrl: http://localhost:8080
- ChecksumsContext:
baseUrl: http://localhost:8080
- CommandLineContext:
baseUrl: http://localhost:8080
ocPath: ../../
- PrincipalPropertySearchContext:
baseUrl: http://localhost:8080
encryption:
paths:
- "%paths.base%/../encryption_features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
- CommandLineContext:
baseUrl: http://localhost:8080
ocPath: ../../
federation:
paths:
- "%paths.base%/../federation_features"
contexts:
- FederationContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
files:
paths:
- "%paths.base%/../files_features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
- CommentsContext:
baseUrl: http://localhost:8080
- TagsContext:
baseUrl: http://localhost:8080
- CardDavContext:
baseUrl: http://localhost:8080
- CalDavContext:
baseUrl: http://localhost:8080
- ChecksumsContext:
baseUrl: http://localhost:8080
- CommandLineContext:
baseUrl: http://localhost:8080
ocPath: ../../
- MetadataContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
files_conversion:
paths:
- "%paths.base%/../file_conversions"
contexts:
- ConversionsContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
files_reminders:
paths:
- "%paths.base%/../files_reminders"
contexts:
- FilesRemindersContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
capabilities:
paths:
- "%paths.base%/../capabilities_features"
contexts:
- CapabilitiesContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
collaboration:
paths:
- "%paths.base%/../collaboration_features"
contexts:
- CollaborationContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
sharees:
paths:
- "%paths.base%/../sharees_features"
contexts:
- ShareesContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
sharing:
paths:
- "%paths.base%/../sharing_features"
contexts:
- SharingContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
- TalkContext
videoverification:
paths:
- "%paths.base%/../videoverification_features"
contexts:
- SharingContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
- TalkContext
guests:
paths:
- "%paths.base%/../guests_features"
contexts:
- GuestsContext
- SharingContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
setup:
paths:
- "%paths.base%/../setup_features"
contexts:
- SetupContext:
baseUrl: http://localhost:8080/ocs/
admin:
- admin
- admin
regular_user_password: 123456
filesdrop:
paths:
- "%paths.base%/../filesdrop_features"
contexts:
- FilesDropContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
ldap:
paths:
- "%paths.base%/../ldap_features"
contexts:
- LDAPContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
openldap_numerical:
paths:
- "%paths.base%/../openldap_numerical_features"
contexts:
- LDAPContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
openldap:
paths:
- "%paths.base%/../openldap_features"
contexts:
- LDAPContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
ratelimiting:
paths:
- "%paths.base%/../ratelimiting_features"
contexts:
- RateLimitingContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
routing:
paths:
- "%paths.base%/../routing_features"
contexts:
- RoutingContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456
theming:
paths:
- "%paths.base%/../theming_features"
contexts:
- FeatureContext:
baseUrl: http://localhost:8080
admin:
- admin
- admin
regular_user_password: 123456