summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeequlim <geequlim@gmail.com>2018-01-03 13:58:27 +0800
committerGeequlim <geequlim@gmail.com>2018-01-03 13:58:27 +0800
commit6c8ec5a930c56bb87c8c2db91e3fa38238b95bdd (patch)
tree70eb27a3af693c72cecae1f005c1d66486dfcc1c
parent2c226e4edf720ebbadf355e244b27082ca01f330 (diff)
Fix crash while the debugger encode a freed object.
-rw-r--r--core/script_debugger_remote.cpp10
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);
}
}