From 2a06b5901650d23eba75f211d5a4cf5d3522ad7c Mon Sep 17 00:00:00 2001 From: Hannah von Reth Date: Tue, 5 Oct 2021 11:45:30 +0200 Subject: Prevent downgrade of Windows VFS folders --- changelog/unreleased/9114 | 5 +++++ src/gui/folder.cpp | 11 ++++++----- src/gui/folder.h | 3 ++- 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 changelog/unreleased/9114 diff --git a/changelog/unreleased/9114 b/changelog/unreleased/9114 new file mode 100644 index 000000000..39afc7d45 --- /dev/null +++ b/changelog/unreleased/9114 @@ -0,0 +1,5 @@ +Bugfix: Downgrades could trigger deletion of virtual files + +We now prevent the downgrade of Windows VFS folders. + +https://github.com/owncloud/client/issues/9114 diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 31c11ebd9..b6c7afa4f 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -58,6 +58,9 @@ auto versionC() { return QStringLiteral("version"); } + +constexpr int WinVfsSettingsVersion = 4; +constexpr int SettingsVersion = 2; } namespace OCC { @@ -1309,11 +1312,9 @@ void FolderDefinition::save(QSettings &settings, const FolderDefinition &folder) settings.setValue(QStringLiteral("virtualFilesMode"), Vfs::modeToString(folder.virtualFilesMode)); // Ensure new vfs modes won't be attempted by older clients - if (folder.virtualFilesMode == Vfs::WindowsCfApi) { - settings.setValue(versionC(), 3); - } else { - settings.setValue(versionC(), 2); - } + const int version = folder.virtualFilesMode == Vfs::WindowsCfApi ? WinVfsSettingsVersion : SettingsVersion; + Q_ASSERT(version <= maxSettingsVersion()); + settings.setValue(versionC(), version); // Happens only on Windows when the explorer integration is enabled. if (!folder.navigationPaneClsid.isNull()) diff --git a/src/gui/folder.h b/src/gui/folder.h index ecd3327a9..3f7d30737 100644 --- a/src/gui/folder.h +++ b/src/gui/folder.h @@ -90,8 +90,9 @@ public: * Version 2: introduction of metadata_parent hash in 2.6.0 * (version remains readable by 2.5.1) * Version 3: introduction of new windows vfs mode in 2.6.0 + * Version 4: until 2.9.1 windows vfs tried to unregister folders with a different id from windows. */ - static int maxSettingsVersion() { return 3; } + static int maxSettingsVersion() { return 4; } /// Ensure / as separator and trailing /. static QString prepareLocalPath(const QString &path); -- cgit v1.2.3