From 19a5884e8d6bfa9d3bdfce359ce39deef4c48110 Mon Sep 17 00:00:00 2001
From: Mika Salmela <mika.salmela@qt.io>
Date: Thu, 8 Jun 2017 16:33:29 +0300
Subject: [PATCH] OpenSL ES: Fix crash caused by overcommitting device with
 data

Sometimes m_format.bytesForDuration(delta) is larger than the QByteArray
containing the data. Therefore select the minimum of these.

Task-number: QTBUG-61085
Change-Id: I20a8ffb77095aecd2711f53d4c9fc7da7f9ae8e2
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
---
 src/plugins/opensles/qopenslesaudioinput.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/plugins/opensles/qopenslesaudioinput.cpp b/src/plugins/opensles/qopenslesaudioinput.cpp
index c3f5ed422..ad87cb057 100644
--- a/src/plugins/opensles/qopenslesaudioinput.cpp
+++ b/src/plugins/opensles/qopenslesaudioinput.cpp
@@ -475,8 +475,11 @@ void QOpenSLESAudioInput::flushBuffers()
 
     qint64 delta = recorderPos * 1000 - devicePos;
 
-    if (delta > 0)
-        writeDataToDevice(m_buffers[m_currentBuffer].constData(), m_format.bytesForDuration(delta));
+    if (delta > 0) {
+        const int writeSize = std::min(m_buffers[m_currentBuffer].size(),
+                                       m_format.bytesForDuration(delta));
+        writeDataToDevice(m_buffers[m_currentBuffer].constData(), writeSize);
+    }
 }
 
 int QOpenSLESAudioInput::bytesReady() const
-- 
GitLab