$ git show --format=fuller --patch-with-stat --summary f9b2d5f164c11cfe83893eb79826723a41e691d6
commit f9b2d5f164c11cfe83893eb79826723a41e691d6
Author: uro <uro@urogaming.co.uk>
AuthorDate: Fri May 2 00:15:52 2025 +0100
Commit: uro <uro@urogaming.co.uk>
CommitDate: Fri May 2 00:15:52 2025 +0100
add upstream unreleased patch
---
7e8d065b7dd405f4be0841fed6887079992029d4.patch | 95 ++++++++++++++++++++++++++
alacenc.spec | 5 +-
2 files changed, 99 insertions(+), 1 deletion(-)
create mode 100644 7e8d065b7dd405f4be0841fed6887079992029d4.patch
diff --git a/7e8d065b7dd405f4be0841fed6887079992029d4.patch b/7e8d065b7dd405f4be0841fed6887079992029d4.patch
new file mode 100644
index 0000000..39d1769
--- /dev/null
+++ b/7e8d065b7dd405f4be0841fed6887079992029d4.patch
@@ -0,0 +1,95 @@
+From 7e8d065b7dd405f4be0841fed6887079992029d4 Mon Sep 17 00:00:00 2001
+From: SokoloffA <sokoloff.a@gmail.com>
+Date: Tue, 11 Mar 2025 19:20:07 +0300
+Subject: [PATCH] Apply olivierlevon patch
+ https://github.com/olivierlevon/alac/commit/eb3ae0c
+
+---
+ vendor/alac/codec/ALACBitUtilities.c | 8 ++++++++
+ vendor/alac/codec/ALACDecoder.cpp | 11 ++++++++++-
+ 2 files changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/vendor/alac/codec/ALACBitUtilities.c b/vendor/alac/codec/ALACBitUtilities.c
+index 9414889..6b95fda 100644
+--- a/vendor/alac/codec/ALACBitUtilities.c
++++ b/vendor/alac/codec/ALACBitUtilities.c
+@@ -37,6 +37,8 @@ void BitBufferInit( BitBuffer * bits, uint8_t * buffer, uint32_t byteSize )
+ bits->byteSize = byteSize;
+ }
+
++#define AssertBufferReadBounds(b, n) RequireAction( b->end >= (b->cur + ((b->bitIndex + n) / 8 + ((b->bitIndex + n) % 8 > 0))), return 0; );
++
+ // BitBufferRead
+ //
+ uint32_t BitBufferRead( BitBuffer * bits, uint8_t numBits )
+@@ -45,6 +47,8 @@ uint32_t BitBufferRead( BitBuffer * bits, uint8_t numBits )
+
+ //Assert( numBits <= 16 );
+
++ AssertBufferReadBounds(bits, numBits)
++
+ returnBits = ((uint32_t)bits->cur[0] << 16) | ((uint32_t)bits->cur[1] << 8) | ((uint32_t)bits->cur[2]);
+ returnBits = returnBits << bits->bitIndex;
+ returnBits &= 0x00FFFFFF;
+@@ -69,6 +73,8 @@ uint8_t BitBufferReadSmall( BitBuffer * bits, uint8_t numBits )
+ uint16_t returnBits;
+
+ //Assert( numBits <= 8 );
++
++ AssertBufferReadBounds(bits, numBits)
+
+ returnBits = (bits->cur[0] << 8) | bits->cur[1];
+ returnBits = returnBits << bits->bitIndex;
+@@ -92,6 +98,8 @@ uint8_t BitBufferReadOne( BitBuffer * bits )
+ {
+ uint8_t returnBits;
+
++ AssertBufferReadBounds(bits, 8)
++
+ returnBits = (bits->cur[0] >> (7 - bits->bitIndex)) & 1;
+
+ bits->bitIndex++;
+diff --git a/vendor/alac/codec/ALACDecoder.cpp b/vendor/alac/codec/ALACDecoder.cpp
+index 929506e..889f771 100644
+--- a/vendor/alac/codec/ALACDecoder.cpp
++++ b/vendor/alac/codec/ALACDecoder.cpp
+@@ -122,7 +122,12 @@ int32_t ALACDecoder::Init(void *inMagicCookie, uint32_t inMagicCookieSize)
+
+ mConfig = theConfig;
+
++ // sanity checks
+ RequireAction(mConfig.compatibleVersion <= kALACVersion, return kALAC_ParamError;);
++ RequireAction(mConfig.bitDepth == 16 || mConfig.bitDepth == 20 || mConfig.bitDepth == 24 || mConfig.bitDepth == 32, return kALAC_ParamError;);
++ RequireAction(mConfig.frameLength > 0 && mConfig.frameLength <= 16384, return kALAC_ParamError;);
++ RequireAction(mConfig.sampleRate > 0 && mConfig.sampleRate <= 384000, return kALAC_ParamError;);
++ RequireAction(mConfig.numChannels > 0 && mConfig.numChannels < kALACMaxChannels, return kALAC_ParamError;);
+
+ // allocate mix buffers
+ mMixBufferU = (int32_t *)calloc(mConfig.frameLength * sizeof(int32_t), 1);
+@@ -240,6 +245,8 @@ int32_t ALACDecoder::Decode(BitBuffer *bits, uint8_t *sampleBuffer, uint32_t num
+ if (partialFrame != 0) {
+ numSamples = BitBufferRead(bits, 16) << 16;
+ numSamples |= BitBufferRead(bits, 16);
++
++ RequireAction(numSamples <= mConfig.frameLength, status = kALAC_ParamError; goto Exit;);
+ }
+
+ if (escapeFlag == 0) {
+@@ -378,6 +385,8 @@ int32_t ALACDecoder::Decode(BitBuffer *bits, uint8_t *sampleBuffer, uint32_t num
+ if (partialFrame != 0) {
+ numSamples = BitBufferRead(bits, 16) << 16;
+ numSamples |= BitBufferRead(bits, 16);
++
++ RequireAction(numSamples <= mConfig.frameLength, status = kALAC_ParamError; goto Exit;);
+ }
+
+ if (escapeFlag == 0) {
+@@ -538,7 +547,7 @@ int32_t ALACDecoder::Decode(BitBuffer *bits, uint8_t *sampleBuffer, uint32_t num
+ case ID_END: {
+ // frame end, all done so byte align the frame and check for overruns
+ BitBufferByteAlign(bits, false);
+- // Assert( bits->cur == bits->end );
++ //Assert( bits->cur == bits->end );
+ goto Exit;
+ }
+ }
diff --git a/alacenc.spec b/alacenc.spec
index 733a70b..ad958a2 100644
--- a/alacenc.spec
+++ b/alacenc.spec
@@ -1,11 +1,14 @@
Name: alacenc
Version: 0.4.1
-Release: 1
+Release: 2
Summary: Encode audio into the Apple Lossless Audio Codec (ALAC) format
URL: https://github.com/flacon/alacenc
License: GPL
Group: Sound/Utilities
Source0: https://github.com/flacon/alacenc/archive/v%{version}/%{name}-%{version}.tar.gz
+# See for patch - https://github.com/flacon/alacenc/issues/1
+Patch0: https://github.com/flacon/alacenc/commit/7e8d065b7dd405f4be0841fed6887079992029d4.patch
+
BuildSystem: cmake
BuildRequires: cmake
BuildRequires: ninja