From dc12e69dd554b37fde353696dfefb04deb3f4900 Mon Sep 17 00:00:00 2001 From: Thai Phan Date: Tue, 2 Dec 2025 15:51:28 +1300 Subject: [PATCH] [asrc_pair] Fix dst_left wrap around bug src_left & dst_left in asrc_pair_convert_s16 are unsigned int. They are decreased in every loop and could wrap around into large unsigned int. That would subsequently mess with the check below. Signed-off-by: Thai Phan --- asrc/asrc_pair.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/asrc/asrc_pair.c b/asrc/asrc_pair.c index 339c749..05c9512 100644 --- a/asrc/asrc_pair.c +++ b/asrc/asrc_pair.c @@ -323,9 +323,11 @@ void asrc_pair_convert_s16(asrc_pair *pair, const int16_t *src, unsigned int src buf_info.output_buffer_vaddr, buf_info.output_buffer_length); s += in_len; - src_left -= in_len; + src_left = (src_left > in_len) ? src_left - in_len : 0; d += buf_info.output_buffer_length; - dst_left -= buf_info.output_buffer_length; + dst_left = (dst_left > buf_info.output_buffer_length) + ? dst_left - buf_info.output_buffer_length + : 0; //printf("[%d/%d]\n", buf_info.output_buffer_length, out_len); }