Fix crash adding expire to key with a subkey expire already set

Former-commit-id: 18a3768e07eb8c4feb4a666d95a19d97267ac381
This commit is contained in:
John Sully 2019-10-16 12:26:48 -04:00
parent 2a472c06f3
commit 4dc728c1ce

View File

@ -805,12 +805,20 @@ public:
// First check if the subkey already has an expiration
for (auto &entry : m_vecexpireEntries)
{
if (entry.spsubkey == nullptr)
continue;
if (sdscmp((sds)entry.spsubkey.get(), (sds)szSubkey) == 0) {
m_vecexpireEntries.erase(m_vecexpireEntries.begin() + (&entry - m_vecexpireEntries.data()));
break;
if (szSubkey != nullptr)
{
// if this is a subkey expiry then its not a match if the expireEntry is either for the
// primary key or a different subkey
if (entry.spsubkey == nullptr || sdscmp((sds)entry.spsubkey.get(), (sds)szSubkey) != 0)
continue;
}
else
{
if (entry.spsubkey != nullptr)
continue;
}
m_vecexpireEntries.erase(m_vecexpireEntries.begin() + (&entry - m_vecexpireEntries.data()));
break;
}
auto itrInsert = std::lower_bound(m_vecexpireEntries.begin(), m_vecexpireEntries.end(), when);
const char *subkey = (szSubkey) ? sdsdup(szSubkey) : nullptr;