diff options
author | Wohlstand <admin@wohlnet.ru> | 2022-11-29 15:46:40 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2022-11-29 15:46:40 +0300 |
commit | 30df2f828f3e92ce26a0e9348f0e0b1a979f4fc0 (patch) | |
tree | 2fd85465ee7a241e7eb91cdf30696b9180c553e9 /src/midi_sequencer_impl.hpp | |
parent | 034cb1c66ed3956b63b69aa4cf2049b6ba295524 (diff) | |
download | libADLMIDI-30df2f828f3e92ce26a0e9348f0e0b1a979f4fc0.tar.gz libADLMIDI-30df2f828f3e92ce26a0e9348f0e0b1a979f4fc0.tar.bz2 libADLMIDI-30df2f828f3e92ce26a0e9348f0e0b1a979f4fc0.zip |
More robust EA-MUS detection/parsing
by https://github.com/dashodanger
https://github.com/Wohlstand/BW_Midi_Sequencer/pull/7
Diffstat (limited to 'src/midi_sequencer_impl.hpp')
-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; } |