From f7e555ea6b11eaf687943f7265dede44538083b8 Mon Sep 17 00:00:00 2001 From: Tropical <42101043+tropicaaal@users.noreply.github.com> Date: Sat, 11 Apr 2026 09:56:20 -0700 Subject: [PATCH] fix: UB with LivingEntities::pushEntities --- targets/minecraft/client/Minecraft.cpp | 2 +- targets/minecraft/world/entity/LivingEntity.cpp | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/targets/minecraft/client/Minecraft.cpp b/targets/minecraft/client/Minecraft.cpp index 8ad354ac6..e2b603811 100644 --- a/targets/minecraft/client/Minecraft.cpp +++ b/targets/minecraft/client/Minecraft.cpp @@ -485,7 +485,7 @@ File Minecraft::getWorkingDirectory(const std::string& applicationName) { return workingDirectory; } else { - Log::info("Could not locate user's home directory. This platform is likely missing an implementation of Minecraft::getWorkingDirectory."); + Log::info("Could not locate user's home directory. This platform is likely missing an implementation of Minecraft::getWorkingDirectory.\n"); assert(0); } } diff --git a/targets/minecraft/world/entity/LivingEntity.cpp b/targets/minecraft/world/entity/LivingEntity.cpp index e5866814f..eed87daa7 100644 --- a/targets/minecraft/world/entity/LivingEntity.cpp +++ b/targets/minecraft/world/entity/LivingEntity.cpp @@ -1604,11 +1604,15 @@ void LivingEntity::pushEntities() { AABB grown = bb.grow(0.2, 0, 0.2); std::vector>* entities = level->getEntities(shared_from_this(), &grown); - if (entities != nullptr && !entities->empty()) { - auto itEnd = entities->end(); - for (auto it = entities->begin(); it != itEnd; it++) { - std::shared_ptr e = *it; // entities->at(i); - if (e and !e->removed and e->isPushable()) push(e); + + if (entities == nullptr || entities->empty()) { + return; + } + + std::vector> prev_entities = *entities; + for (const std::shared_ptr& e : prev_entities) { + if (e && !e->removed && e->isPushable()) { + push(e); } } }