diff options
author | Jeremiah Benham <jjbenham@chicagoguitar.com> | 2010-02-19 10:44:31 -0600 |
---|---|---|
committer | Jeremiah Benham <jjbenham@chicagoguitar.com> | 2010-02-19 10:44:31 -0600 |
commit | 5ab01398d2bf3a7ae7b8f5349723f255147c877e (patch) | |
tree | ada089c2d457e21cc56daa2867240e198bb28f7a /libsmf | |
parent | d719b0d082621067fc2e7893955ffaf4a6db830d (diff) |
smf_load.c update from svn
Diffstat (limited to 'libsmf')
-rw-r--r-- | libsmf/smf_load.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/libsmf/smf_load.c b/libsmf/smf_load.c index dbcdaf91..fe8178fe 100644 --- a/libsmf/smf_load.c +++ b/libsmf/smf_load.c @@ -83,8 +83,8 @@ next_chunk(smf_t *smf) smf->next_chunk_offset += sizeof(struct chunk_header_struct) + ntohl(chunk->length); if (smf->next_chunk_offset > smf->file_buffer_length) { - g_critical("SMF error: malformed chunk; truncated file?"); - return (NULL); + g_critical("SMF warning: malformed chunk; truncated file?"); + smf->next_chunk_offset = smf->file_buffer_length; } return (chunk); @@ -290,7 +290,8 @@ expected_sysex_length(const unsigned char status, const unsigned char *second_by return (-1); } - extract_vlq(second_byte, buffer_length, &sysex_length, &len); + if (extract_vlq(second_byte, buffer_length, &sysex_length, &len)) + return (-1); if (consumed_bytes != NULL) *consumed_bytes = len; @@ -774,8 +775,14 @@ parse_mtrk_chunk(smf_track_t *track) event = parse_next_event(track); /* Couldn't parse an event? */ - if (event == NULL) - return (-1); + if (event == NULL) { + g_critical("Unable to parse MIDI event; truncating track."); + if (smf_track_add_eot_delta_pulses(track, 0) != 0) { + g_critical("smf_track_add_eot_delta_pulses failed."); + return (-2); + } + break; + } assert(smf_event_is_valid(event)); |