summaryrefslogtreecommitdiff
path: root/libs/evoral/src/libsmf/smf_load.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/evoral/src/libsmf/smf_load.c')
-rw-r--r--libs/evoral/src/libsmf/smf_load.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/libs/evoral/src/libsmf/smf_load.c b/libs/evoral/src/libsmf/smf_load.c
index d8168d0e6a..26ab0e6a1f 100644
--- a/libs/evoral/src/libsmf/smf_load.c
+++ b/libs/evoral/src/libsmf/smf_load.c
@@ -565,11 +565,17 @@ parse_next_event(smf_track_t *track)
assert(track->next_event_offset > 0);
buffer_length = track->file_buffer_length - track->next_event_offset;
- assert(buffer_length > 0);
-
+ /* if there was no meta-EOT event, buffer_length can be zero. This is
+ an error in the SMF file, but it shouldn't be treated as fatal.
+ */
+ if (buffer_length == 0) {
+ g_warning ("SMF warning: expected EOT at end of track, but none found");
+ goto error;
+ }
/* First, extract time offset from previous event. */
- if (smf_extract_vlq(c, buffer_length, &etime, &len))
+ if (smf_extract_vlq(c, buffer_length, &etime, &len)) {
goto error;
+ }
c += len;
buffer_length -= len;
@@ -578,8 +584,9 @@ parse_next_event(smf_track_t *track)
goto error;
/* Now, extract the actual event. */
- if (extract_midi_event(c, buffer_length, event, &len, track->last_status))
+ if (extract_midi_event(c, buffer_length, event, &len, track->last_status)) {
goto error;
+ }
c += len;
buffer_length -= len;