From d0f138ae5aaeb6291f12c49a13e3bb2e2237c792 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 1 Mar 2018 09:33:54 +0100 Subject: Filtering for empty id's does not work, so detect and guard against it. --- common/synchronizer.cpp | 9 +++++++-- 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) { QByteArrayList result; if (filter.value.canConvert()) { - result << filter.value.value(); + const auto value = filter.value.value(); + if (value.isEmpty()) { + SinkErrorCtx(mLogCtx) << "Tried to filter for an empty value: " << filter; + } else { + result << filter.value.value(); + } } else if (filter.value.canConvert()) { auto query = filter.value.value(); Storage::EntityStore store{mResourceContext, mLogCtx}; DataStoreQuery dataStoreQuery{query, query.type(), store}; auto resultSet = dataStoreQuery.execute(); - resultSet.replaySet(0, 0, [this, &result](const ResultSet::Result &r) { + resultSet.replaySet(0, 0, [&result](const ResultSet::Result &r) { result << r.entity.identifier(); }); } 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 QByteArray SynchronizerStore::resolveLocalId(const QByteArray &bufferType, const QByteArray &localId) { + if (localId.isEmpty()) { + SinkError() << "Tried to resolve an empty local id"; + Q_ASSERT(false); + return {}; + } QByteArray remoteId = Index("localid.mapping." + bufferType, mTransaction).lookup(localId); if (remoteId.isEmpty()) { //This can happen if we didn't store the remote id in the first place -- cgit v1.2.3