瀏覽代碼

Fix potential malloc(0)

Marc Gilleron 7 年之前
父節點
當前提交
e7202cef8b
共有 1 個文件被更改,包括 8 次插入4 次删除
  1. 8 4
      include/core/Godot.hpp

+ 8 - 4
include/core/Godot.hpp

@@ -448,9 +448,11 @@ void register_signal(String name, Dictionary args = Dictionary())
 	signal.num_args = args.size();
 	signal.num_default_args = 0;
 
-	signal.args = (godot_signal_argument*) godot::api->godot_alloc(sizeof(godot_signal_argument) * signal.num_args);
-	memset((void *) signal.args, 0, sizeof(godot_signal_argument) * signal.num_args);
-
+	// Need to check because malloc(0) is platform-dependent. Zero arguments will leave args to NULL.
+	if(signal.num_args != 0) {
+		signal.args = (godot_signal_argument*) godot::api->godot_alloc(sizeof(godot_signal_argument) * signal.num_args);
+		memset((void *) signal.args, 0, sizeof(godot_signal_argument) * signal.num_args);
+	}
 
 	for (int i = 0; i < signal.num_args; i++) {
 		// Array entry = args[i];
@@ -471,7 +473,9 @@ void register_signal(String name, Dictionary args = Dictionary())
 		godot::api->godot_string_destroy(&signal.args[i].name);
 	}
 
-	godot::api->godot_free(signal.args);
+	if(signal.args) {
+		godot::api->godot_free(signal.args);
+	}
 }