diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/midi_sequencer_impl.hpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/midi_sequencer_impl.hpp b/src/midi_sequencer_impl.hpp index d9ff580..a37988d 100644 --- a/src/midi_sequencer_impl.hpp +++ b/src/midi_sequencer_impl.hpp @@ -2250,9 +2250,9 @@ static bool detectRSXX(const char *head, FileAndMemReader &fr) bool ret = false; // Try to identify RSXX format - if(head[0] == 0x7D) + if(head[0] >= 0x5D && fr.fileSize() > head[0]) { - fr.seek(0x6D, FileAndMemReader::SET); + fr.seek(head[0] - 0x10, FileAndMemReader::SET); fr.read(headerBuf, 1, 6); if(std::memcmp(headerBuf, "rsxx}u", 6) == 0) ret = true; @@ -2496,14 +2496,20 @@ bool BW_MidiSequencer::parseRSXX(FileAndMemReader &fr) } // Try to identify RSXX format - if(headerBuf[0] == 0x7D) + char start = headerBuf[0]; + if(start < 0x5D) { - fr.seek(0x6D, FileAndMemReader::SET); + m_errorString = "RSXX song too short!\n"; + return false; + } + else + { + fr.seek(start - 0x10, FileAndMemReader::SET); fr.read(headerBuf, 1, 6); if(std::memcmp(headerBuf, "rsxx}u", 6) == 0) { m_format = Format_RSXX; - fr.seek(0x7D, FileAndMemReader::SET); + fr.seek(start, FileAndMemReader::SET); trackCount = 1; deltaTicks = 60; } |