summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2018-03-01 09:33:54 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2018-03-01 09:33:54 +0100
commitd0f138ae5aaeb6291f12c49a13e3bb2e2237c792 (patch)
treeaf3a799073a4d4a297df826c08ba7e034bd818a6
parent32a901b7860516d3e24dd72d76e2a4c483d71b54 (diff)
downloadsink-d0f138ae5aaeb6291f12c49a13e3bb2e2237c792.tar.gz
sink-d0f138ae5aaeb6291f12c49a13e3bb2e2237c792.zip
Filtering for empty id's does not work, so detect and guard against it.
-rw-r--r--common/synchronizer.cpp9
-rw-r--r--common/synchronizerstore.cpp5
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
69QByteArray SynchronizerStore::resolveLocalId(const QByteArray &bufferType, const QByteArray &localId) 69QByteArray 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