29 lines
1022 B
Diff
29 lines
1022 B
Diff
|
From d71f294566e53c967a6a1e2d5c684499ec390d69 Mon Sep 17 00:00:00 2001
|
||
|
From: Clemens Ladisch <clemens@ladisch.de>
|
||
|
Date: Sat, 18 Mar 2017 23:10:33 +0100
|
||
|
Subject: [PATCH 40/43] rawmidi: virtual: fix reading into a small buffer
|
||
|
|
||
|
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 | 4 ++--
|
||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||
|
|
||
|
--- a/src/rawmidi/rawmidi_virt.c
|
||
|
+++ b/src/rawmidi/rawmidi_virt.c
|
||
|
@@ -263,8 +263,8 @@ static ssize_t snd_rawmidi_virtual_read(
|
||
|
}
|
||
|
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;
|
||
|
}
|