]> git.alsa-project.org Git - alsa-lib.git/commitdiff
rawmidi_virt: fix hang on invalid MIDI data
authorClemens Ladisch <clemens@ladisch.de>
Thu, 10 Mar 2005 10:45:19 +0000 (10:45 +0000)
committerClemens Ladisch <clemens@ladisch.de>
Thu, 10 Mar 2005 10:45:19 +0000 (10:45 +0000)
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

index 03ce2e70d59b42f2c45af21f31d7249a40d12bb1..0e92042bcbf518df8bbc043b7468fdaf756487e8 100644 (file)
@@ -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);