Fix crash adding expire to key with a subkey expire already set
Former-commit-id: 18a3768e07eb8c4feb4a666d95a19d97267ac381
This commit is contained in:
parent
2a472c06f3
commit
4dc728c1ce
14
src/server.h
14
src/server.h
@ -805,13 +805,21 @@ 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)
|
||||||
|
{
|
||||||
|
// 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;
|
continue;
|
||||||
if (sdscmp((sds)entry.spsubkey.get(), (sds)szSubkey) == 0) {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (entry.spsubkey != nullptr)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
m_vecexpireEntries.erase(m_vecexpireEntries.begin() + (&entry - m_vecexpireEntries.data()));
|
m_vecexpireEntries.erase(m_vecexpireEntries.begin() + (&entry - m_vecexpireEntries.data()));
|
||||||
break;
|
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;
|
||||||
m_vecexpireEntries.emplace(itrInsert, when, subkey);
|
m_vecexpireEntries.emplace(itrInsert, when, subkey);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user