diff options
author | David Robillard <d@drobilla.net> | 2007-12-06 06:16:30 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-12-06 06:16:30 +0000 |
commit | 1739aa1b633a592e595fe3bfb56c615e3b76c6f8 (patch) | |
tree | 65ea0ac19a492fe4f1122e791e0c4f6a1e422c49 /src/SMFReader.cpp | |
parent | feab87ff3c9dce87ef127c8c7e42e6d51950aa2e (diff) | |
download | raul-1739aa1b633a592e595fe3bfb56c615e3b76c6f8.tar.gz raul-1739aa1b633a592e595fe3bfb56c615e3b76c6f8.tar.bz2 raul-1739aa1b633a592e595fe3bfb56c615e3b76c6f8.zip |
MIDI robustness fixes.
git-svn-id: http://svn.drobilla.net/lad/raul@954 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/SMFReader.cpp')
-rw-r--r-- | src/SMFReader.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
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) { |