summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuel Leblond <emmanuel.leblond@gmail.com>2017-10-16 00:19:31 +0200
committerEmmanuel Leblond <emmanuel.leblond@gmail.com>2017-10-16 08:16:37 +0200
commit9c1f6c5db684715ac9f386398a454a282ceb6c3f (patch)
treefacde35d234e8f71b6f95425439e02c480189128
parent0d0cb01f3385d512de0f91b0d73706a3380ec063 (diff)
[Nativescript] fix crash when loading a library with missing godot_nativescript_init
-rw-r--r--modules/gdnative/nativescript/nativescript.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp
index 52379560b3..0b522c944e 100644
--- a/modules/gdnative/nativescript/nativescript.cpp
+++ b/modules/gdnative/nativescript/nativescript.cpp
@@ -1011,10 +1011,13 @@ void NativeScriptLanguage::init_library(const Ref<GDNativeLibrary> &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<String, Set<NativeScript *> >::Element *U = NSL->library_script_users.front(); U; U = U->next()) {
for (Set<NativeScript *>::Element *S = U->get().front(); S; S = S->next()) {