diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml index 5a0dea07d3f..6305db26e2c 100644 --- a/.github/workflows/linux_builds.yml +++ b/.github/workflows/linux_builds.yml @@ -8,8 +8,8 @@ env: SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes strict_checks=yes DOTNET_NOLOGO: true DOTNET_CLI_TELEMETRY_OPTOUT: true - TSAN_OPTIONS: suppressions=misc/error_suppressions/tsan.txt - UBSAN_OPTIONS: suppressions=misc/error_suppressions/ubsan.txt + TSAN_OPTIONS: suppressions=${{ github.workspace }}/misc/error_suppressions/tsan.txt + UBSAN_OPTIONS: suppressions=${{ github.workspace }}/misc/error_suppressions/ubsan.txt jobs: build-linux: diff --git a/scene/3d/spring_bone_simulator_3d.cpp b/scene/3d/spring_bone_simulator_3d.cpp index 91b3906edf7..54ae2807f32 100644 --- a/scene/3d/spring_bone_simulator_3d.cpp +++ b/scene/3d/spring_bone_simulator_3d.cpp @@ -607,6 +607,7 @@ void SpringBoneSimulator3D::set_radius(int p_index, float p_radius) { } float SpringBoneSimulator3D::get_radius(int p_index) const { + ERR_FAIL_INDEX_V(p_index, settings.size(), 0); return settings[p_index]->radius; } @@ -640,6 +641,7 @@ void SpringBoneSimulator3D::set_stiffness(int p_index, float p_stiffness) { } float SpringBoneSimulator3D::get_stiffness(int p_index) const { + ERR_FAIL_INDEX_V(p_index, settings.size(), 0); return settings[p_index]->stiffness; } @@ -762,8 +764,15 @@ SpringBoneSimulator3D::RotationAxis SpringBoneSimulator3D::get_rotation_axis(int void SpringBoneSimulator3D::set_setting_count(int p_count) { ERR_FAIL_COND(p_count < 0); - int delta = p_count - settings.size() + 1; + + int delta = p_count - settings.size(); + if (delta < 0) { + for (int i = delta; i < 0; i++) { + memdelete(settings[settings.size() + i]); + } + } settings.resize(p_count); + delta++; if (delta > 1) { for (int i = 1; i < delta; i++) { settings.write[p_count - i] = memnew(SpringBone3DSetting); @@ -949,8 +958,14 @@ void SpringBoneSimulator3D::set_joint_count(int p_index, int p_count) { ERR_FAIL_INDEX(p_index, settings.size()); ERR_FAIL_COND(p_count < 0); Vector &joints = settings[p_index]->joints; - int delta = p_count - joints.size() + 1; + int delta = p_count - joints.size(); + if (delta < 0) { + for (int i = delta; i < 0; i++) { + memdelete(joints[joints.size() + i]); + } + } joints.resize(p_count); + delta++; if (delta > 1) { for (int i = 1; i < delta; i++) { joints.write[p_count - i] = memnew(SpringBone3DJointSetting); @@ -1659,3 +1674,7 @@ Quaternion SpringBoneSimulator3D::get_from_to_rotation(const Vector3 &p_from, co } return Quaternion(axis.normalized(), angle); } + +SpringBoneSimulator3D::~SpringBoneSimulator3D() { + clear_settings(); +} diff --git a/scene/3d/spring_bone_simulator_3d.h b/scene/3d/spring_bone_simulator_3d.h index 7f0583bb629..e01ab1deee7 100644 --- a/scene/3d/spring_bone_simulator_3d.h +++ b/scene/3d/spring_bone_simulator_3d.h @@ -284,6 +284,8 @@ public: #ifdef TOOLS_ENABLED virtual bool is_processed_on_saving() const override { return true; } #endif + + ~SpringBoneSimulator3D(); }; VARIANT_ENUM_CAST(SpringBoneSimulator3D::BoneDirection); diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index 8b0fe63f5a1..92b92dd8bb4 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -2330,6 +2330,8 @@ TypedArray GraphEdit::_get_connections_intersecting_with_rect(const } TypedArray GraphEdit::_get_connection_list_from_node(const StringName &p_node) const { + ERR_FAIL_COND_V(!connection_map.has(p_node), TypedArray()); + List> connections_from_node = connection_map.get(p_node); TypedArray connections_from_node_dict;