summaryrefslogtreecommitdiffstats
path: root/src/SMFReader.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-12-06 06:16:30 +0000
committerDavid Robillard <d@drobilla.net>2007-12-06 06:16:30 +0000
commit1739aa1b633a592e595fe3bfb56c615e3b76c6f8 (patch)
tree65ea0ac19a492fe4f1122e791e0c4f6a1e422c49 /src/SMFReader.cpp
parentfeab87ff3c9dce87ef127c8c7e42e6d51950aa2e (diff)
downloadraul-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.cpp5
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) {