From 9c1f6c5db684715ac9f386398a454a282ceb6c3f Mon Sep 17 00:00:00 2001 From: Emmanuel Leblond Date: Mon, 16 Oct 2017 00:19:31 +0200 Subject: [PATCH] [Nativescript] fix crash when loading a library with missing godot_nativescript_init --- modules/gdnative/nativescript/nativescript.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp index 52379560b3f..0b522c944ee 100644 --- a/modules/gdnative/nativescript/nativescript.cpp +++ b/modules/gdnative/nativescript/nativescript.cpp @@ -1011,10 +1011,13 @@ void NativeScriptLanguage::init_library(const Ref &lib) { void *proc_ptr; - gdn->get_symbol(_init_call_name, proc_ptr); - - ((void (*)(godot_string *))proc_ptr)((godot_string *)&lib_path); + Error err = gdn->get_symbol(_init_call_name, proc_ptr); + if (err != OK) { + ERR_PRINT(String("No " + _init_call_name + " in \"" + lib_path + "\" found").utf8().get_data()); + } else { + ((void (*)(godot_string *))proc_ptr)((godot_string *)&lib_path); + } } else { // already initialized. Nice. } @@ -1138,9 +1141,12 @@ void NativeReloadNode::_notification(int p_what) { // here the library registers all the classes and stuff. void *proc_ptr; - L->get()->get_symbol("godot_nativescript_init", proc_ptr); - - ((void (*)(void *))proc_ptr)((void *)&L->key()); + Error err = L->get()->get_symbol("godot_nativescript_init", proc_ptr); + if (err != OK) { + ERR_PRINT(String("No godot_nativescript_init in \"" + L->key() + "\" found").utf8().get_data()); + } else { + ((void (*)(void *))proc_ptr)((void *)&L->key()); + } for (Map >::Element *U = NSL->library_script_users.front(); U; U = U->next()) { for (Set::Element *S = U->get().front(); S; S = S->next()) {