From e3f57ccc903221eef77d98ad615b20d636059e5e Mon Sep 17 00:00:00 2001 From: Clemens Ladisch Date: Thu, 10 Mar 2005 10:45:19 +0000 Subject: [PATCH] rawmidi_virt: fix hang on invalid MIDI data When writing invalid MIDI data to a virtual rawmidi port, snd_rawmidi_virtual_write() would forget to remove that data from the input buffer before continuing, resulting in an infinite loop. --- src/rawmidi/rawmidi_virt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rawmidi/rawmidi_virt.c b/src/rawmidi/rawmidi_virt.c index 03ce2e70..0e92042b 100644 --- a/src/rawmidi/rawmidi_virt.c +++ b/src/rawmidi/rawmidi_virt.c @@ -206,11 +206,11 @@ static ssize_t snd_rawmidi_virtual_write(snd_rawmidi_t *rmidi, const void *buffe size1 = snd_midi_event_encode(virt->midi_event, buffer, size, &virt->out_event); if (size1 <= 0) break; - if (virt->out_event.type == SND_SEQ_EVENT_NONE) - continue; size -= size1; result += size1; buffer += size1; + if (virt->out_event.type == SND_SEQ_EVENT_NONE) + continue; snd_seq_ev_set_subs(&virt->out_event); snd_seq_ev_set_source(&virt->out_event, virt->port); snd_seq_ev_set_direct(&virt->out_event); -- 2.47.1