From e8e166eec595992268383d02e6932484f5b5440d Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 12 Nov 2019 23:22:25 -0500 Subject: [PATCH] Ensures no out-of-disk-bounds mirroring. --- Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp b/Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp index 995607273..8e7359d4f 100644 --- a/Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp +++ b/Storage/Disk/DiskImage/Formats/MFMSectorDump.cpp @@ -22,10 +22,11 @@ void MFMSectorDump::set_geometry(int sectors_per_track, uint8_t sector_size, uin } std::shared_ptr MFMSectorDump::get_track_at_position(Track::Address address) { - uint8_t sectors[(128 << sector_size_)*sectors_per_track_]; + if(address.head >= get_head_count()) return nullptr; + if(address.position.as_largest() >= get_maximum_head_position().as_largest()) return nullptr; - if(address.head > 1) return nullptr; - long file_offset = get_file_offset_for_position(address); + uint8_t sectors[(128 << sector_size_)*sectors_per_track_]; + const long file_offset = get_file_offset_for_position(address); { std::lock_guard lock_guard(file_.get_file_access_mutex()); @@ -45,7 +46,7 @@ void MFMSectorDump::set_tracks(const std::map(sectors_per_track_-1), sector_size_, is_double_density_); - long file_offset = get_file_offset_for_position(track.first); + const long file_offset = get_file_offset_for_position(track.first); std::lock_guard lock_guard(file_.get_file_access_mutex()); file_.ensure_is_at_least_length(file_offset);