From 666e5d790409f4614a1da45a71d7b43b365389b4 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Fri, 8 Jul 2022 16:03:32 +0200
Subject: [PATCH] input/CdioParanoia: use integer modulo to calculate "diff"

---
 src/input/plugins/CdioParanoiaInputPlugin.cxx | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/src/input/plugins/CdioParanoiaInputPlugin.cxx b/src/input/plugins/CdioParanoiaInputPlugin.cxx
index 5ddcca353..a2e9c8211 100644
--- a/src/input/plugins/CdioParanoiaInputPlugin.cxx
+++ b/src/input/plugins/CdioParanoiaInputPlugin.cxx
@@ -296,6 +296,8 @@ CdioParanoiaInputStream::Read(std::unique_lock<Mutex> &,
 	const int16_t *rbuf;
 
 	const lsn_t lsn_relofs = offset / CDIO_CD_FRAMESIZE_RAW;
+	const std::size_t diff = offset % CDIO_CD_FRAMESIZE_RAW;
+
 	if (lsn_relofs != buffer_lsn) {
 		const ScopeUnlock unlock(mutex);
 
@@ -320,11 +322,6 @@ CdioParanoiaInputStream::Read(std::unique_lock<Mutex> &,
 		rbuf = (const int16_t *)buffer;
 	}
 
-	//correct offset
-	const int diff = offset - lsn_relofs * CDIO_CD_FRAMESIZE_RAW;
-
-	assert(diff >= 0 && diff < CDIO_CD_FRAMESIZE_RAW);
-
 	const size_t maxwrite = CDIO_CD_FRAMESIZE_RAW - diff;  //# of bytes pending in current buffer
 	const std::size_t nbytes = std::min(length, maxwrite);