diff options
-rw-r--r-- | raul/MIDISink.hpp | 6 | ||||
-rw-r--r-- | src/SMFReader.cpp | 5 |
2 files changed, 6 insertions, 5 deletions
diff --git a/raul/MIDISink.hpp b/raul/MIDISink.hpp index 6955911..e30dad2 100644 --- a/raul/MIDISink.hpp +++ b/raul/MIDISink.hpp @@ -29,9 +29,9 @@ namespace Raul { */ class MIDISink : public Deletable { public: - virtual void write_event(BeatTime time, - size_t ev_size, - const unsigned char* ev) throw (std::logic_error) = 0; + virtual void write_event(BeatTime time, + size_t ev_size, + const uint8_t* ev) throw (std::logic_error) = 0; }; diff --git a/src/SMFReader.cpp b/src/SMFReader.cpp index 49e3888..9b2e4de 100644 --- a/src/SMFReader.cpp +++ b/src/SMFReader.cpp @@ -209,7 +209,7 @@ SMFReader::read_event(size_t buf_len, unsigned char* buf, uint32_t* ev_size, uin { // - 4 is for the EOT event, which we don't actually want to read //if (feof(_fd) || ftell(_fd) >= HEADER_SIZE + _track_size - 4) { - if (feof(_fd)) { + if (!_fd || feof(_fd)) { return -1; } @@ -264,13 +264,14 @@ SMFReader::read_event(size_t buf_len, unsigned char* buf, uint32_t* ev_size, uin } } - if (*ev_size > buf_len) { + if (*ev_size > buf_len || *ev_size == 0 || feof(_fd)) { //cerr << "Skipping event" << endl; // Skip event, return 0 fseek(_fd, *ev_size - 1, SEEK_CUR); return 0; } else { // Read event, return size + assert(!ferror(_fd)); fread(buf+1, 1, *ev_size - 1, _fd); if ((buf[0] & 0xF0) == 0x90 && buf[2] == 0) { |