From 8d17d10ebb7573c01c70e1b2f9d2d76293a604cc Mon Sep 17 00:00:00 2001 From: jsteemann Date: Fri, 29 Apr 2016 16:25:17 +0200 Subject: [PATCH] fixed undefined behavior --- arangod/Aql/QueryCache.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/arangod/Aql/QueryCache.cpp b/arangod/Aql/QueryCache.cpp index efe55d518e..2fe56a2a28 100644 --- a/arangod/Aql/QueryCache.cpp +++ b/arangod/Aql/QueryCache.cpp @@ -151,9 +151,10 @@ void QueryCacheDatabaseEntry::store(uint64_t hash, // remove previous entry auto it = _entriesByHash.find(hash); TRI_ASSERT(it != _entriesByHash.end()); - unlink((*it).second); + auto previous = (*it).second; + unlink(previous); _entriesByHash.erase(it); - tryDelete((*it).second); + tryDelete(previous); // and insert again _entriesByHash.emplace(hash, entry); @@ -186,9 +187,10 @@ void QueryCacheDatabaseEntry::store(uint64_t hash, // finally remove entry itself from hash table auto it = _entriesByHash.find(hash); TRI_ASSERT(it != _entriesByHash.end()); + auto previous = (*it).second; _entriesByHash.erase(it); - unlink((*it).second); - tryDelete((*it).second); + unlink(previous); + tryDelete(previous); throw; } @@ -400,6 +402,8 @@ QueryCacheResultEntry* QueryCache::store( TRI_vocbase_t* vocbase, uint64_t hash, char const* queryString, size_t queryStringLength, std::shared_ptr result, std::vector const& collections) { + + if (!result->slice().isArray()) { return nullptr; }