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