Fixed possible segfault in case of invalid filename based on patch #559.

Since this save/restore list exists in all devices, it's safe to move the new
code to the usb_device_c destructor.
This commit is contained in:
Volker Ruppert 2021-04-13 11:56:41 +00:00
parent d74210b93f
commit 049826aa32
7 changed files with 7 additions and 6 deletions

View File

@ -285,6 +285,12 @@ usb_device_c::usb_device_c(void)
d.async_mode = 1;
}
usb_device_c::~usb_device_c()
{
if (d.sr != NULL)
d.sr->clear();
}
// Find device with given address
usb_device_c* usb_device_c::find_device(Bit8u addr)
{

View File

@ -164,7 +164,7 @@ BOCHSAPI extern bx_usbdev_ctl_c bx_usbdev_ctl;
class BOCHSAPI usb_device_c : public logfunctions {
public:
usb_device_c(void);
virtual ~usb_device_c() {}
virtual ~usb_device_c();
virtual bool init() {return d.connected;}
virtual const char* get_info() {return NULL;}

View File

@ -374,7 +374,6 @@ usb_floppy_device_c::usb_floppy_device_c()
usb_floppy_device_c::~usb_floppy_device_c(void)
{
d.sr->clear();
bx_gui->unregister_statusitem(s.statusbar_id);
set_inserted(0);
if (s.dev_buffer != NULL)

View File

@ -736,7 +736,6 @@ usb_hid_device_c::usb_hid_device_c(const char *devname)
usb_hid_device_c::~usb_hid_device_c(void)
{
d.sr->clear();
if ((d.type == USB_HID_TYPE_MOUSE) ||
(d.type == USB_HID_TYPE_TABLET)) {
bx_gui->set_mouse_mode_absxy(0);

View File

@ -226,7 +226,6 @@ usb_hub_device_c::~usb_hub_device_c(void)
for (int i = 0; i < hub.n_ports; i++) {
remove_device(i);
}
d.sr->clear();
if (SIM->is_wx_selected()) {
bx_list_c *usb = (bx_list_c*)SIM->get_param("ports.usb");
usb->remove(hub.config->get_name());

View File

@ -393,7 +393,6 @@ usb_msd_device_c::usb_msd_device_c(const char *devname)
usb_msd_device_c::~usb_msd_device_c(void)
{
d.sr->clear();
if (s.scsi_dev != NULL)
delete s.scsi_dev;
if (s.hdimage != NULL) {

View File

@ -171,7 +171,6 @@ usb_printer_device_c::usb_printer_device_c()
usb_printer_device_c::~usb_printer_device_c(void)
{
d.sr->clear();
if (s.fp != NULL) {
fclose(s.fp);
}