]> git.alsa-project.org Git - alsa-lib.git/commitdiff
rawmidi: virtual: fix reading into a small buffer
authorClemens Ladisch <clemens@ladisch.de>
Sat, 18 Mar 2017 22:10:33 +0000 (23:10 +0100)
committerTakashi Iwai <tiwai@suse.de>
Mon, 20 Mar 2017 09:34:21 +0000 (10:34 +0100)
In the special case for handling partial messages, the pointer
calculations were wrong, which would result in data corruption.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Reviewd-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/rawmidi/rawmidi_virt.c

index e5b17e4861c42d98670851788cb0fecee7221b60..7daf3e16c198c3037b06da8ce23fcedad652deb5 100644 (file)
@@ -263,8 +263,8 @@ static ssize_t snd_rawmidi_virtual_read(snd_rawmidi_t *rmidi, void *buffer, size
                }
                size1 = virt->in_buf_size - virt->in_buf_ofs;
                if ((size_t)size1 > size) {
-                       virt->in_buf_ofs += size1 - size;
-                       memcpy(buffer, virt->in_buf_ptr, size);
+                       memcpy(buffer, virt->in_buf_ptr + virt->in_buf_ofs, size);
+                       virt->in_buf_ofs += size;
                        result += size;
                        break;
                }