From a8daa1bbfff84e322be5d90a5129098ff0891e05 Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 26 Dec 2023 22:41:45 +0100 Subject: [PATCH] Improve error handling in `CMidiTrack::readVarLen()` * Always check `failed()` aber `readByte()` consistently * Simplify coding style --- src/MidiTrack.cpp | 16 ++++++++-------- src/MidiTrack.h | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/MidiTrack.cpp b/src/MidiTrack.cpp index e2005a1..6d542c5 100644 --- a/src/MidiTrack.cpp +++ b/src/MidiTrack.cpp @@ -105,14 +105,14 @@ dword_t CMidiTrack::readVarLen() if ((value = readByte()) & 0x80) { value &= 0x7F; - for (i =0; i < 4; i++) - { - value = ( value << 7 ) + (( c = readByte()) & 0x7F ); - if (failed() == true) + if (failed()) { + return value; + } + for (i = 0; i < 4; ++i) { + value = (value << 7) + (( c = readByte()) & 0x7F ); + if (failed() || (c & 0x80) == 0) break; - if ((c & 0x80) == 0) - break; - else if (i>=3) + else if (i >= 3) errorFail(SMF_END_OF_FILE); } } @@ -120,7 +120,7 @@ dword_t CMidiTrack::readVarLen() if (value > 400) __dt(ppDebugTrack(2,"Large variable length data %d", value)); #endif - return ( value ); + return value; } std::string CMidiTrack::readTextEvent() diff --git a/src/MidiTrack.h b/src/MidiTrack.h index 060555f..919813b 100644 --- a/src/MidiTrack.h +++ b/src/MidiTrack.h @@ -72,7 +72,7 @@ public: dword_t getTrackLength() {return m_trackLength;} void decodeTrack(); - bool failed() { return (m_midiError != SMF_NO_ERROR) ? true : false;} + bool failed() { return m_midiError != SMF_NO_ERROR;} midiErrors_t getMidiError() { return m_midiError;} int length() {return m_trackEventQueue->length();} @@ -107,7 +107,7 @@ private: if (m_trackLengthCounter != 0 ) { c = static_cast(m_file.get()); - if (m_file.fail() == true) + if (m_file.fail()) errorFail(SMF_END_OF_FILE); m_trackLengthCounter--; }