diff options
author | Geequlim <geequlim@gmail.com> | 2018-01-03 13:58:27 +0800 |
---|---|---|
committer | Geequlim <geequlim@gmail.com> | 2018-01-03 13:58:27 +0800 |
commit | 6c8ec5a930c56bb87c8c2db91e3fa38238b95bdd (patch) | |
tree | 70eb27a3af693c72cecae1f005c1d66486dfcc1c | |
parent | 2c226e4edf720ebbadf355e244b27082ca01f330 (diff) |
Fix crash while the debugger encode a freed object.
-rw-r--r-- | core/script_debugger_remote.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp index a2505cbc53..a0a55ce86e 100644 --- a/core/script_debugger_remote.cpp +++ b/core/script_debugger_remote.cpp @@ -129,15 +129,21 @@ static ObjectID safe_get_instance_id(const Variant &p_v) { void ScriptDebuggerRemote::_put_variable(const String &p_name, const Variant &p_variable) { packet_peer_stream->put_var(p_name); + + Variant var = p_variable; + if (p_variable.get_type() == Variant::OBJECT && !ObjectDB::instance_validate(p_variable)) { + var = Variant(); + } + int len = 0; - Error err = encode_variant(p_variable, NULL, len); + Error err = encode_variant(var, NULL, len); if (err != OK) ERR_PRINT("Failed to encode variant"); if (len > packet_peer_stream->get_output_buffer_max_size()) { //limit to max size packet_peer_stream->put_var(Variant()); } else { - packet_peer_stream->put_var(p_variable); + packet_peer_stream->put_var(var); } } |