Merge pull request #8702 from sfc-gh-ajbeamon/fix-ub-in-keyafter

Fix undefined behavior in keyAfter
This commit is contained in:
Jingyu Zhou 2022-11-04 14:16:04 -07:00 committed by GitHub
commit a5a5df715b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -553,7 +553,9 @@ inline KeyRef keyAfter(const KeyRef& key, Arena& arena) {
return allKeysEnd; return allKeysEnd;
} }
uint8_t* t = new (arena) uint8_t[key.size() + 1]; uint8_t* t = new (arena) uint8_t[key.size() + 1];
memcpy(t, key.begin(), key.size()); if (!key.empty()) {
memcpy(t, key.begin(), key.size());
}
t[key.size()] = 0; t[key.size()] = 0;
return KeyRef(t, key.size() + 1); return KeyRef(t, key.size() + 1);
} }
@ -564,7 +566,9 @@ inline Key keyAfter(const KeyRef& key) {
} }
inline KeyRangeRef singleKeyRange(KeyRef const& key, Arena& arena) { inline KeyRangeRef singleKeyRange(KeyRef const& key, Arena& arena) {
uint8_t* t = new (arena) uint8_t[key.size() + 1]; uint8_t* t = new (arena) uint8_t[key.size() + 1];
memcpy(t, key.begin(), key.size()); if (!key.empty()) {
memcpy(t, key.begin(), key.size());
}
t[key.size()] = 0; t[key.size()] = 0;
return KeyRangeRef(KeyRef(t, key.size()), KeyRef(t, key.size() + 1)); return KeyRangeRef(KeyRef(t, key.size()), KeyRef(t, key.size() + 1));
} }