diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-03-01 09:33:54 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2018-03-01 09:33:54 +0100 |
commit | d0f138ae5aaeb6291f12c49a13e3bb2e2237c792 (patch) | |
tree | af3a799073a4d4a297df826c08ba7e034bd818a6 /common | |
parent | 32a901b7860516d3e24dd72d76e2a4c483d71b54 (diff) | |
download | sink-d0f138ae5aaeb6291f12c49a13e3bb2e2237c792.tar.gz sink-d0f138ae5aaeb6291f12c49a13e3bb2e2237c792.zip |
Filtering for empty id's does not work, so detect and guard against it.
Diffstat (limited to 'common')
-rw-r--r-- | common/synchronizer.cpp | 9 | ||||
-rw-r--r-- | common/synchronizerstore.cpp | 5 |
2 files changed, 12 insertions, 2 deletions
diff --git a/common/synchronizer.cpp b/common/synchronizer.cpp index b8de1ed..48e71ff 100644 --- a/common/synchronizer.cpp +++ b/common/synchronizer.cpp | |||
@@ -244,13 +244,18 @@ QByteArrayList Synchronizer::resolveFilter(const QueryBase::Comparator &filter) | |||
244 | { | 244 | { |
245 | QByteArrayList result; | 245 | QByteArrayList result; |
246 | if (filter.value.canConvert<QByteArray>()) { | 246 | if (filter.value.canConvert<QByteArray>()) { |
247 | result << filter.value.value<QByteArray>(); | 247 | const auto value = filter.value.value<QByteArray>(); |
248 | if (value.isEmpty()) { | ||
249 | SinkErrorCtx(mLogCtx) << "Tried to filter for an empty value: " << filter; | ||
250 | } else { | ||
251 | result << filter.value.value<QByteArray>(); | ||
252 | } | ||
248 | } else if (filter.value.canConvert<QueryBase>()) { | 253 | } else if (filter.value.canConvert<QueryBase>()) { |
249 | auto query = filter.value.value<QueryBase>(); | 254 | auto query = filter.value.value<QueryBase>(); |
250 | Storage::EntityStore store{mResourceContext, mLogCtx}; | 255 | Storage::EntityStore store{mResourceContext, mLogCtx}; |
251 | DataStoreQuery dataStoreQuery{query, query.type(), store}; | 256 | DataStoreQuery dataStoreQuery{query, query.type(), store}; |
252 | auto resultSet = dataStoreQuery.execute(); | 257 | auto resultSet = dataStoreQuery.execute(); |
253 | resultSet.replaySet(0, 0, [this, &result](const ResultSet::Result &r) { | 258 | resultSet.replaySet(0, 0, [&result](const ResultSet::Result &r) { |
254 | result << r.entity.identifier(); | 259 | result << r.entity.identifier(); |
255 | }); | 260 | }); |
256 | } else { | 261 | } else { |
diff --git a/common/synchronizerstore.cpp b/common/synchronizerstore.cpp index 0dd2846..ca7e6d2 100644 --- a/common/synchronizerstore.cpp +++ b/common/synchronizerstore.cpp | |||
@@ -68,6 +68,11 @@ QByteArray SynchronizerStore::resolveRemoteId(const QByteArray &bufferType, cons | |||
68 | 68 | ||
69 | QByteArray SynchronizerStore::resolveLocalId(const QByteArray &bufferType, const QByteArray &localId) | 69 | QByteArray SynchronizerStore::resolveLocalId(const QByteArray &bufferType, const QByteArray &localId) |
70 | { | 70 | { |
71 | if (localId.isEmpty()) { | ||
72 | SinkError() << "Tried to resolve an empty local id"; | ||
73 | Q_ASSERT(false); | ||
74 | return {}; | ||
75 | } | ||
71 | QByteArray remoteId = Index("localid.mapping." + bufferType, mTransaction).lookup(localId); | 76 | QByteArray remoteId = Index("localid.mapping." + bufferType, mTransaction).lookup(localId); |
72 | if (remoteId.isEmpty()) { | 77 | if (remoteId.isEmpty()) { |
73 | //This can happen if we didn't store the remote id in the first place | 78 | //This can happen if we didn't store the remote id in the first place |