From e4edc9be4e4233579a904f87f2836f961f821d08 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Sat, 9 Sep 2023 07:49:35 -0700 Subject: [PATCH] fix crash on invalid saved seed id --- docs/changelog.txt | 1 + plugins/seedwatch.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/docs/changelog.txt b/docs/changelog.txt index 609ad09cc..432b936b0 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -57,6 +57,7 @@ Template for new versions: ## Fixes - `buildingplan`: make the construction dimensions readout visible again +- `seedwatch`: fix a crash when reading data saved by very very old versions of the plugin ## Misc Improvements - `sort`: sort by need for training on squad assignment screen diff --git a/plugins/seedwatch.cpp b/plugins/seedwatch.cpp index df49efec2..7cbdcbd2a 100644 --- a/plugins/seedwatch.cpp +++ b/plugins/seedwatch.cpp @@ -103,6 +103,10 @@ static bool validate_seed_config(color_ostream& out, PersistentDataItem c) { int seed_id = get_config_val(c, SEED_CONFIG_ID); auto plant = binsearch_in_vector(world->raws.plants.all, &df::plant_raw::index, seed_id); + if (!plant) { + WARN(config, out).print("discarded invalid seed id: %d\n", seed_id); + return false; + } bool valid = (!plant->flags.is_set(df::enums::plant_raw_flags::TREE)); if (!valid) { DEBUG(config, out).print("invalid configuration for %s discarded\n", plant->id.c_str());