src/runtime: fix nil map dereference

Operations on nil maps are accepted and shouldn't
panic. The base hashmapGet/hashmapDelete handled
nil-maps correctly, but the hashmapBinary versions
could segfault accessing the nil map while trying
to hash the key.

Fixes #2341
This commit is contained in:
Damian Gryski
2021-12-07 22:31:07 -08:00
committed by Ron Evans
parent cfe6b9765f
commit d6c892fe7b
3 changed files with 13 additions and 0 deletions
+8
View File
@@ -307,16 +307,24 @@ func hashmapNext(m *hashmap, it *hashmapIterator, key, value unsafe.Pointer) boo
// Hashmap with plain binary data keys (not containing strings etc.).
func hashmapBinarySet(m *hashmap, key, value unsafe.Pointer) {
// TODO: detect nil map here and throw a better panic message?
hash := hashmapHash(key, uintptr(m.keySize))
hashmapSet(m, key, value, hash, memequal)
}
func hashmapBinaryGet(m *hashmap, key, value unsafe.Pointer, valueSize uintptr) bool {
if m == nil {
memzero(value, uintptr(valueSize))
return false
}
hash := hashmapHash(key, uintptr(m.keySize))
return hashmapGet(m, key, value, valueSize, hash, memequal)
}
func hashmapBinaryDelete(m *hashmap, key unsafe.Pointer) {
if m == nil {
return
}
hash := hashmapHash(key, uintptr(m.keySize))
hashmapDelete(m, key, hash, memequal)
}