From 3bf1f55990e12e00aedd45e8e889f39ba73f40dd Mon Sep 17 00:00:00 2001 From: Alexander Shabalin Date: Tue, 2 Feb 2021 09:24:37 +0300 Subject: [PATCH] Handle nullptr in StablePointer API (#4671) --- kotlin-native/runtime/src/mm/cpp/Memory.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/kotlin-native/runtime/src/mm/cpp/Memory.cpp b/kotlin-native/runtime/src/mm/cpp/Memory.cpp index b6e68d734f3..7e43061f1ef 100644 --- a/kotlin-native/runtime/src/mm/cpp/Memory.cpp +++ b/kotlin-native/runtime/src/mm/cpp/Memory.cpp @@ -292,23 +292,35 @@ extern "C" RUNTIME_NOTHROW bool ClearSubgraphReferences(ObjHeader* root, bool ch } extern "C" RUNTIME_NOTHROW void* CreateStablePointer(ObjHeader* object) { + if (!object) + return nullptr; + auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData(); return mm::StableRefRegistry::Instance().RegisterStableRef(threadData, object); } extern "C" RUNTIME_NOTHROW void DisposeStablePointer(void* pointer) { + if (!pointer) + return; + auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData(); auto* node = static_cast(pointer); mm::StableRefRegistry::Instance().UnregisterStableRef(threadData, node); } extern "C" RUNTIME_NOTHROW OBJ_GETTER(DerefStablePointer, void* pointer) { + if (!pointer) + RETURN_OBJ(nullptr); + auto* node = static_cast(pointer); ObjHeader* object = **node; RETURN_OBJ(object); } extern "C" RUNTIME_NOTHROW OBJ_GETTER(AdoptStablePointer, void* pointer) { + if (!pointer) + RETURN_OBJ(nullptr); + auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData(); auto* node = static_cast(pointer); ObjHeader* object = **node;