1
0
Fork 0

fixed undefined behavior

This commit is contained in:
jsteemann 2016-04-29 16:25:17 +02:00
parent 841790e524
commit 8d17d10ebb
1 changed files with 8 additions and 4 deletions

View File

@ -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<VPackBuilder> result,
std::vector<std::string> const& collections) {
if (!result->slice().isArray()) {
return nullptr;
}