From f36d0313f1a022904bb11b184f4fb1832f16b1b7 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Mon, 23 Dec 2024 02:37:15 +0300 Subject: [PATCH] Glitter: Fixed crash when trying to access freed memory --- src/CRE/Glitter/effect_group.cpp | 9 +++++++++ src/CRE/Glitter/particle_inst.cpp | 18 ++++++++++++------ src/KKdLib/database/texture.cpp | 5 ++--- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/CRE/Glitter/effect_group.cpp b/src/CRE/Glitter/effect_group.cpp index 71716182..172011d2 100644 --- a/src/CRE/Glitter/effect_group.cpp +++ b/src/CRE/Glitter/effect_group.cpp @@ -41,6 +41,13 @@ namespace Glitter { resources = 0; } +#if SHARED_GLITTER_BUFFER + if (scene) { + delete scene; + scene = 0; + } +#endif + for (Effect*& i : effects) if (i) { delete i; @@ -48,10 +55,12 @@ namespace Glitter { } effects.clear(); +#if !SHARED_GLITTER_BUFFER if (scene) { delete scene; scene = 0; } +#endif } void EffectGroup::GetStartEndFrame(int32_t& start_frame, int32_t& end_frame) { diff --git a/src/CRE/Glitter/particle_inst.cpp b/src/CRE/Glitter/particle_inst.cpp index 537264d4..7abd02d4 100644 --- a/src/CRE/Glitter/particle_inst.cpp +++ b/src/CRE/Glitter/particle_inst.cpp @@ -91,13 +91,16 @@ namespace Glitter { } F2ParticleInst::~F2ParticleInst() { - for (F2ParticleInst* i : data.children) - delete i; - if (data.render_group) { data.render_group->DeleteBuffers(true); data.render_group = 0; } + + for (F2ParticleInst*& i : data.children) + if (i) { + delete i; + i = 0; + } } void F2ParticleInst::AccelerateParticle(GLT, RenderElement* rend_elem, @@ -554,13 +557,16 @@ namespace Glitter { } XParticleInst::~XParticleInst() { - for (XParticleInst*& i : data.children) - delete i; - if (data.render_group) { data.render_group->DeleteBuffers(true); data.render_group = 0; } + + for (XParticleInst*& i : data.children) + if (i) { + delete i; + i = 0; + } } void XParticleInst::AccelerateParticle(RenderElement* rend_elem, diff --git a/src/KKdLib/database/texture.cpp b/src/KKdLib/database/texture.cpp index 041af085..636c70ce 100644 --- a/src/KKdLib/database/texture.cpp +++ b/src/KKdLib/database/texture.cpp @@ -224,9 +224,8 @@ void texture_database::add(texture_database_file* tex_db_file) { if (!tex_db_file || !tex_db_file->ready) return; - texture.reserve(tex_db_file->texture.size()); - - std::vector< texture_info> texture_add; + std::vector texture_add; + texture_add.reserve(tex_db_file->texture.size()); for (texture_info_file& i : tex_db_file->texture) { texture_info* info;