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());