When filled is negative (underrun), qpw_write() logs an error but
falls through to spa_ringbuffer_write_data(). Bail out instead.

Reported-by: Pavee Hui <[email protected]>
Fixes: c2d3d1c29415 ("audio/pwaudio.c: Add Pipewire audio backend for QEMU")
Signed-off-by: Marc-André Lureau <[email protected]>
---
 audio/pwaudio.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/audio/pwaudio.c b/audio/pwaudio.c
index 8b3faae8a907..18b371dc4f93 100644
--- a/audio/pwaudio.c
+++ b/audio/pwaudio.c
@@ -326,6 +326,8 @@ qpw_write(HWVoiceOut *hw, void *data, size_t len)
 
     if (filled < 0) {
         error_report("%p: underrun write:%u filled:%d", pw, index, filled);
+        len = 0;
+        goto done_unlock;
     } else {
         if ((uint32_t) filled + len > RINGBUFFER_SIZE) {
             error_report("%p: overrun write:%u filled:%d + size:%zu > max:%u",

-- 
2.56.0.rc0.29.g47ce80527c56


Reply via email to