瀏覽代碼

Fix NULL dereferencing in get_from_variant and cast_to

bruvzg 6 年之前
父節點
當前提交
be5a012ff7
共有 2 個文件被更改,包括 5 次插入2 次删除
  1. 1 1
      binding_generator.py
  2. 4 1
      include/core/Godot.hpp

+ 1 - 1
binding_generator.py

@@ -155,7 +155,7 @@ def generate_class_header(used_classes, c):
     # ___get_class_name
     source.append("\tstatic inline const char *___get_class_name() { return (const char *) \"" + strip_name(c["name"]) + "\"; }")
 
-    source.append("\tstatic inline Object *___get_from_variant(Variant a) { godot_object *o = (godot_object*) a; return (Object *) godot::nativescript_1_1_api->godot_nativescript_get_instance_binding_data(godot::_RegisterState::language_index, o); }")
+    source.append("\tstatic inline Object *___get_from_variant(Variant a) { godot_object *o = (godot_object*) a; return (o) ? (Object *) godot::nativescript_1_1_api->godot_nativescript_get_instance_binding_data(godot::_RegisterState::language_index, o) : nullptr; }")
 
     enum_values = []
 

+ 4 - 1
include/core/Godot.hpp

@@ -24,7 +24,7 @@ namespace godot {
 
 template <class T>
 T *as(const Object *obj) {
-	return (T *)godot::nativescript_api->godot_nativescript_get_userdata(obj->_owner);
+	return (obj) ? (T *)godot::nativescript_api->godot_nativescript_get_userdata(obj->_owner) : nullptr;
 }
 
 template <class T>
@@ -428,6 +428,9 @@ void register_signal(String name, Args... varargs) {
 #ifndef GODOT_CPP_NO_OBJECT_CAST
 template <class T>
 T *Object::cast_to(const Object *obj) {
+	if (!obj)
+		return nullptr;
+
 	size_t have_tag = (size_t)godot::nativescript_1_1_api->godot_nativescript_get_type_tag(obj->_owner);
 
 	if (have_tag) {