From 952c633a659f9703e126a996e4965c03fb6dce8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Mon, 26 Jun 2023 15:26:00 +0200 Subject: [PATCH] LibAudio: Fix 32-bit/64-bit mixup in FLAC sign extend The bit magic for two's complement sign extension was only sign extending to 32-bit signed. This issue was exposed by the last commit, where now we actually use the 64-bit return value. --- Userland/Libraries/LibAudio/FlacLoader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibAudio/FlacLoader.cpp b/Userland/Libraries/LibAudio/FlacLoader.cpp index deda14784d..a70e17edd1 100644 --- a/Userland/Libraries/LibAudio/FlacLoader.cpp +++ b/Userland/Libraries/LibAudio/FlacLoader.cpp @@ -768,7 +768,7 @@ ErrorOr, LoaderError> FlacLoaderPlugin::decode_custom_lpc(FlacSubfra // read coefficients for (auto i = 0; i < subframe.order; ++i) { u64 raw_coefficient = LOADER_TRY(bit_input.read_bits(lpc_precision)); - i64 coefficient = static_cast(sign_extend(raw_coefficient, lpc_precision)); + i64 coefficient = sign_extend(raw_coefficient, lpc_precision); coefficients.unchecked_append(coefficient); } @@ -970,7 +970,7 @@ i64 sign_extend(u32 n, u8 size) { // negative if ((n & (1 << (size - 1))) > 0) { - return static_cast(n | (0xffffffff << size)); + return static_cast(n | (0xffffffffffffffffLL << size)); } // positive return n;