ソースを参照

fix(gdscript): Fix out of bounds crash after reloading member variables

The crash happens because the members Vector is resized, while the member_indices_cache still has the old indices saved.
On deleting a member from the script this can result to a cached index of 1 while the members Vector size is only 1.
Antonio Dell'Annunziata 3 年 前
コミット
e03b7b1935
1 ファイル変更2 行追加2 行削除
  1. 2 2
      modules/gdscript/gdscript.cpp

+ 2 - 2
modules/gdscript/gdscript.cpp

@@ -1636,8 +1636,6 @@ const Vector<Multiplayer::RPCConfig> GDScriptInstance::get_rpc_methods() const {
 void GDScriptInstance::reload_members() {
 #ifdef DEBUG_ENABLED
 
-	members.resize(script->member_indices.size()); //resize
-
 	Vector<Variant> new_members;
 	new_members.resize(script->member_indices.size());
 
@@ -1649,6 +1647,8 @@ void GDScriptInstance::reload_members() {
 		}
 	}
 
+	members.resize(new_members.size()); //resize
+
 	//apply
 	members = new_members;