diff options
author | 2019-07-18 16:14:02 +0200 | |
---|---|---|
committer | 2019-07-18 10:14:02 -0400 | |
commit | a14ec2ca5c5613e032159ee1c854a99e19a8e7d7 (patch) | |
tree | 739565338a6e30a46ed4c9a7143a541cc8741d0a /src/emu | |
parent | 7939bb9b7865e6aed11da705f13a8e1ed9c7206e (diff) |
Fix segfault when trying to access some image option that does not exists (#5352)
* emuopts.h: Add method to check if image option exists
* image.cpp: Avoid to require image_option if it does not exists
Diffstat (limited to 'src/emu')
-rw-r--r-- | src/emu/emuopts.h | 1 | ||||
-rw-r--r-- | src/emu/image.cpp | 5 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h index c16e9c24567..a619b51a65c 100644 --- a/src/emu/emuopts.h +++ b/src/emu/emuopts.h @@ -480,6 +480,7 @@ public: bool has_slot_option(const std::string &device_name) const { return find_slot_option(device_name) ? true : false; } const ::image_option &image_option(const std::string &device_name) const; ::image_option &image_option(const std::string &device_name); + bool has_image_option(const std::string &device_name) const { return m_image_options.find(device_name) != m_image_options.end(); } protected: virtual void command_argument_processed() override; diff --git a/src/emu/image.cpp b/src/emu/image.cpp index 7504fa93ff5..3013d03f668 100644 --- a/src/emu/image.cpp +++ b/src/emu/image.cpp @@ -196,7 +196,8 @@ void image_manager::options_extract() // Note that as a part of #2, we cannot extract the option when the image in question is a part of an // active reset_on_load; hence the check for is_reset_and_loading() (see issue #2414) if (!image.is_reset_on_load() - || (!image.exists() && !image.is_reset_and_loading() && !machine().options().image_option(image.instance_name()).value().empty())) + || (!image.exists() && !image.is_reset_and_loading() + && machine().options().has_image_option(image.instance_name()) && !machine().options().image_option(image.instance_name()).value().empty())) { // we have to assemble the image option differently for software lists and for normal images std::string image_opt; @@ -211,7 +212,7 @@ void image_manager::options_extract() } // and set the option (provided that it hasn't been removed out from under us) - if (machine().options().exists(image.instance_name())) + if (machine().options().exists(image.instance_name()) && machine().options().has_image_option(image.instance_name())) machine().options().image_option(image.instance_name()).specify(std::move(image_opt)); } } |