Merge pull request #73216 from baptr/multiplayer
Fix multiplayer replication crash in on_sync_receive.
This commit is contained in:
commit
02dcf40162
1 changed files with 4 additions and 2 deletions
|
@ -742,6 +742,7 @@ Error SceneReplicationInterface::on_sync_receive(int p_from, const uint8_t *p_bu
|
|||
ofs += 4;
|
||||
uint32_t size = decode_uint32(&p_buffer[ofs]);
|
||||
ofs += 4;
|
||||
ERR_FAIL_COND_V(size > uint32_t(p_buffer_len - ofs), ERR_INVALID_DATA);
|
||||
MultiplayerSynchronizer *sync = nullptr;
|
||||
if (net_id & 0x80000000) {
|
||||
sync = Object::cast_to<MultiplayerSynchronizer>(multiplayer->get_path_cache()->get_cached_object(p_from, net_id & 0x7FFFFFFF));
|
||||
|
@ -756,14 +757,15 @@ Error SceneReplicationInterface::on_sync_receive(int p_from, const uint8_t *p_bu
|
|||
}
|
||||
Node *node = sync->get_root_node();
|
||||
if (sync->get_multiplayer_authority() != p_from || !node) {
|
||||
ERR_CONTINUE(true);
|
||||
// Not valid for me.
|
||||
ofs += size;
|
||||
ERR_CONTINUE_MSG(true, "Ignoring sync data from non-authority or for missing node.");
|
||||
}
|
||||
if (!sync->update_inbound_sync_time(time)) {
|
||||
// State is too old.
|
||||
ofs += size;
|
||||
continue;
|
||||
}
|
||||
ERR_FAIL_COND_V(size > uint32_t(p_buffer_len - ofs), ERR_BUG);
|
||||
const List<NodePath> props = sync->get_replication_config()->get_sync_properties();
|
||||
Vector<Variant> vars;
|
||||
vars.resize(props.size());
|
||||
|
|
Loading…
Reference in a new issue