diff --git a/tools/editor/editor_app.cpp b/tools/editor/editor_app.cpp index 66817109..b2b7059a 100644 --- a/tools/editor/editor_app.cpp +++ b/tools/editor/editor_app.cpp @@ -1703,6 +1703,9 @@ void EditorApp::snapSelectedToGround() { void EditorApp::flattenAroundSelected(float radius) { auto* sel = objectPlacer_.getSelected(); if (!sel || !terrain_.isLoaded()) return; + if (!std::isfinite(radius) || radius <= 0.0f || + !std::isfinite(sel->position.x) || !std::isfinite(sel->position.y) || + !std::isfinite(sel->position.z)) return; terrainEditor_.beginGeneratorUndo(); float targetHeight = sel->position.z; diff --git a/tools/editor/terrain_editor.cpp b/tools/editor/terrain_editor.cpp index 88518a14..a5f57fcd 100644 --- a/tools/editor/terrain_editor.cpp +++ b/tools/editor/terrain_editor.cpp @@ -905,6 +905,9 @@ void TerrainEditor::createMesa(const glm::vec3& center, float radius, float heig void TerrainEditor::createHill(const glm::vec3& center, float radius, float height) { if (!terrain_) return; + if (!std::isfinite(center.x) || !std::isfinite(center.y) || + !std::isfinite(radius) || radius <= 0.0f || + !std::isfinite(height)) return; recordGeneratorUndo(); for (int ci = 0; ci < 256; ci++) { auto& chunk = terrain_->chunks[ci];