From bbedeed1c5d0f4af57228cc755c9f8e2ca6248ac Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 13 Jan 2016 17:49:41 +0100 Subject: [PATCH] SyncEngine: For server older than 8.1, ignore invalid char in new directories Server older than 8.1 cannot cope with invalid char in the filename so we must not send them from the client. We were already checking for new files, but not for renames or new directories. https://github.com/owncloud/enterprise/issues/1009 --- src/libsync/propagateupload.cpp | 10 ---------- src/libsync/syncengine.cpp | 13 +++++++++++++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index e468f8791..ff6c1dad6 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -199,16 +199,6 @@ void PropagateUploadFileQNAM::start() return; } - if (_propagator->account()->serverVersionInt() < 0x080100) { - // Server version older than 8.1 don't support these character in filename. - static const QRegExp invalidCharRx("[\\\\:?*\"<>|]"); - if (_item->_file.contains(invalidCharRx)) { - _item->_httpErrorCode = 400; // So the entry get blacklisted - done(SyncFileItem::NormalError, tr("File name contains at least one invalid character")); - return; - } - } - _propagator->_activeJobs++; if (!_deleteExisting) { diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 6be3e93b3..301c0fb5a 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -816,6 +816,19 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) (*it)->_file = adjustRenamedPath((*it)->_file); } + // Check for invalid character in old server version + if (_account->serverVersionInt() < 0x080100) { + // Server version older than 8.1 don't support these character in filename. + static const QRegExp invalidCharRx("[\\\\:?*\"<>|]"); + for (auto it = _syncedItems.begin(); it != _syncedItems.end(); ++it) { + if ((*it)->_direction == SyncFileItem::Up && + (*it)->destination().contains(invalidCharRx)) { + (*it)->_errorString = tr("File name contains at least one invalid character"); + (*it)->_instruction = CSYNC_INSTRUCTION_IGNORE; + } + } + } + // Sort items per destination std::sort(_syncedItems.begin(), _syncedItems.end());