diff --git a/src/dos/cdrom.h b/src/dos/cdrom.h index b1cf283a..38fe3ad2 100644 --- a/src/dos/cdrom.h +++ b/src/dos/cdrom.h @@ -230,7 +230,6 @@ private: } player; // Private utility functions - void ClearTracks(); bool LoadIsoFile(char *filename); bool CanReadPVD(TrackFile *file, int sectorSize, bool mode2); std::vector::iterator GetTrack(int sector); diff --git a/src/dos/cdrom_image.cpp b/src/dos/cdrom_image.cpp index acd39bbe..58086159 100644 --- a/src/dos/cdrom_image.cpp +++ b/src/dos/cdrom_image.cpp @@ -19,6 +19,7 @@ // #define DEBUG 1 #include "cdrom.h" +#include #include #include #include @@ -242,7 +243,7 @@ CDROM_Interface_Image::~CDROM_Interface_Image() if (player.cd == this) { player.cd = nullptr; } - ClearTracks(); + tracks.clear(); if (refCount == 0) { StopAudio(); if (player.channel != nullptr) { @@ -439,10 +440,6 @@ bool CDROM_Interface_Image::PlayAudioSector(unsigned long start, unsigned long l track->attr == 0x40 || track->file == nullptr || player.channel == nullptr) { - LOG_MSG("CDROM: PlayAudioSector at start sector %lu for %lu " - " number of frames => bad request, skipping", - start, - len); StopAudio(); return false; } @@ -1034,7 +1031,9 @@ bool CDROM_Interface_Image::AddTrack(Track &curr, int &shift, const int prestart return true; } - Track &prev = *(tracks.end() - 1); + // Guard against undefined behavior in subsequent tracks.back() call + assert(!tracks.empty()); + Track &prev{ tracks.back() }; // current track consumes data from the same file as the previous if (prev.file == curr.file) { @@ -1172,11 +1171,6 @@ bool CDROM_Interface_Image::GetCueString(string &str, istream &in) return true; } -void CDROM_Interface_Image::ClearTracks() -{ - tracks.clear(); -} - void CDROM_Image_Destroy(Section*) { Sound_Quit(); }