From 858194cad643d2c363fe8253c9c03a76ddd7307d Mon Sep 17 00:00:00 2001 From: Robert Crossfield Date: Sun, 24 May 2026 12:14:42 +1000 Subject: [PATCH] Clamp max sprite parameter to safe range --- Source/Parameters.cpp | 19 ++++++++++++++----- Source/Parameters.hpp | 3 +++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Source/Parameters.cpp b/Source/Parameters.cpp index 4ef0447b..9dbb9936 100644 --- a/Source/Parameters.cpp +++ b/Source/Parameters.cpp @@ -31,7 +31,7 @@ using Json = nlohmann::json; cxxopts::Options* sFodderParameters::mCliOptions = 0; /* These values override the original engine values, when in custom mode */ -const size_t CUSTOM_DEFAULT_MAX_SPRITES = 100000; +const size_t CUSTOM_DEFAULT_MAX_SPRITES = sFodderParameters::MAX_SPRITES_MAX; const size_t CUSTOM_DEFAULT_MAX_SPAWN = 25; std::string sFodderParameters::ToJson() { @@ -90,8 +90,10 @@ bool sFodderParameters::FromJson(const std::string& pJson) { else mSpritesMax = 45; // The original engine limit - if (mSpritesMax < 16) - mSpritesMax = 16; + if (mSpritesMax < MIN_SPRITES_MAX) + mSpritesMax = MIN_SPRITES_MAX; + if (mSpritesMax > MAX_SPRITES_MAX) + mSpritesMax = MAX_SPRITES_MAX; } // Max Spawned @@ -309,8 +311,10 @@ bool sFodderParameters::ProcessCLI(int argc, char *argv[]) { if (result.count("max-spawn")) mSpawnEnemyMax = result["max-spawn"].as(); - if (mSpritesMax < 16) - mSpritesMax = 16; + if (mSpritesMax < MIN_SPRITES_MAX) + mSpritesMax = MIN_SPRITES_MAX; + if (mSpritesMax > MAX_SPRITES_MAX) + mSpritesMax = MAX_SPRITES_MAX; // Cheats perm enabled in debug build #ifdef _DEBUG @@ -507,6 +511,11 @@ bool sFodderParameters::ProcessINI() { auto maxspawn = ini.get("maxspawn", 0); if (maxspawn) mSpawnEnemyMax = maxspawn; + + if (mSpritesMax < MIN_SPRITES_MAX) + mSpritesMax = MIN_SPRITES_MAX; + if (mSpritesMax > MAX_SPRITES_MAX) + mSpritesMax = MAX_SPRITES_MAX; } } diff --git a/Source/Parameters.hpp b/Source/Parameters.hpp index f231e53b..b3e9673b 100644 --- a/Source/Parameters.hpp +++ b/Source/Parameters.hpp @@ -80,6 +80,9 @@ class sFodderParameters { size_t mSpritesMax; size_t mSpawnEnemyMax; + static constexpr size_t MIN_SPRITES_MAX = 45; + static constexpr size_t MAX_SPRITES_MAX = 100000; + bool mShowHelp; bool mCopyProtection;