mirror of
https://github.com/holub/mame
synced 2025-07-02 08:39:21 +03:00
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
This commit is contained in:
parent
7939bb9b78
commit
a14ec2ca5c
@ -480,6 +480,7 @@ public:
|
|||||||
bool has_slot_option(const std::string &device_name) const { return find_slot_option(device_name) ? true : false; }
|
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;
|
const ::image_option &image_option(const std::string &device_name) const;
|
||||||
::image_option &image_option(const std::string &device_name);
|
::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:
|
protected:
|
||||||
virtual void command_argument_processed() override;
|
virtual void command_argument_processed() override;
|
||||||
|
@ -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
|
// 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)
|
// active reset_on_load; hence the check for is_reset_and_loading() (see issue #2414)
|
||||||
if (!image.is_reset_on_load()
|
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
|
// we have to assemble the image option differently for software lists and for normal images
|
||||||
std::string image_opt;
|
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)
|
// 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));
|
machine().options().image_option(image.instance_name()).specify(std::move(image_opt));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user