[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 1/3] audio: st_rate_flow exist a infinite loop
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 1/3] audio: st_rate_flow exist a infinite loop |
Date: |
Mon, 17 Jul 2017 11:29:21 +0200 |
From: Peng Hao <address@hidden>
If a voice recording equipment is opened for a long time(several days)
in windows guest, rate->ipos will overflow and rate->opos will never
have a chance to change. It will result to a infinite loop.
Signed-off-by: Peng Hao <address@hidden>
Signed-off-by: Wang Yechao <address@hidden>
Message-id: address@hidden
Signed-off-by: Gerd Hoffmann <address@hidden>
---
audio/rate_template.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/audio/rate_template.h b/audio/rate_template.h
index bd4b1c7685..6e93588877 100644
--- a/audio/rate_template.h
+++ b/audio/rate_template.h
@@ -71,6 +71,12 @@ void NAME (void *opaque, struct st_sample *ibuf, struct
st_sample *obuf,
while (rate->ipos <= (rate->opos >> 32)) {
ilast = *ibuf++;
rate->ipos++;
+
+ /* if ipos overflow, there is a infinite loop */
+ if (rate->ipos == 0xffffffff) {
+ rate->ipos = 1;
+ rate->opos = rate->opos & 0xffffffff;
+ }
/* See if we finished the input buffer yet */
if (ibuf >= iend) {
goto the_end;
--
2.9.3