Control: tags -1 patch

I am uploading a NMU to fix this.
The debdiff is attached.
diff -Nru fdkaac-1.0.0/ChangeLog fdkaac-1.0.6/ChangeLog
--- fdkaac-1.0.0/ChangeLog      2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/ChangeLog      2024-05-05 17:44:07.000000000 +0200
@@ -1,8 +1,88 @@
+2022-08-04  nu774 <honeycom...@gmail.com>
+
+  * bump [HEAD -> master]
+
+  * fdk-aac.vcxproj: support vs2022
+
+  * extrapolater: don't return more samples than required
+
+  * wav/caf parser: add format checks
+
+2022-07-13  nu774 <honeycom...@gmail.com>
+
+  * update ChangeLog [origin/master]
+
+  * bump [v1.0.3]
+
+  * wav/caf parser: ensure fmt/desc chunk
+
+2021-11-15  nu774 <honeycom...@gmail.com>
+
+  * vcxproj: support Visual Studio 2022
+
+2021-04-23  nu774 <honeycom...@gmail.com>
+
+  * bump [v1.0.2]
+
+  * m4af: fix mvhd/tkhd duration
+
+2020-09-21  nu774 <honeycom...@gmail.com>
+
+  * bump [v1.0.1]
+
+  * add Windows 10 long pathname manifest
+
+2019-09-27  nu774 <honeycom...@gmail.com>
+
+  * fix indent
+
+2019-09-19  Dima <yud...@gmail.com>
+
+  * process 32-bit input if possible (i.e. respect aac:INT_PCM type)
+
+2019-04-04  nu774 <honeycom...@gmail.com>
+
+  * vcxproj: support visual studio 2019
+
+2018-12-10  tico-tico <sergei....@gmx.com>
+
+  * don't inject timestamp
+
+2018-09-04  nu774 <honeycom...@gmail.com>
+
+  * bump version 1.0.0 [1.0.0]
+
+  * Fix LD/ELD issue: priming samples are too short to be discarded
+
+2018-09-03  nu774 <honeycom...@gmail.com>
+
+  * FDKv2 API change: encoderDelay -> nDelay/nDelayCore
+
+  * update MSVC projects for FDKv2
+
+  * use different IntDir for fdk-aac build
+
+  * remove zombies from fdk-aac.vcxproj.filters
+
+  * fix: -L option was not working (resulted in segfault)
+
+2017-03-16  nu774 <honeycom...@gmail.com>
+
+  * MSVC projects: update for VS2017
+
+2017-01-16  nu774 <honeycom...@gmail.com>
+
+  * address issue#26
+
+2016-08-27  nu774 <honeycom...@gmail.com>
+
+  * remove aacenc_hcr.* from MSVC project
+
 2016-08-26  nu774 <honeycom...@gmail.com>
 
-  * update ChangeLog [HEAD -> master]
+  * update ChangeLog
 
-  * bump [origin/master]
+  * bump [v0.6.3]
 
   * Ticket #23: quit supporting MPEG-2 AOT
 
diff -Nru fdkaac-1.0.0/configure.ac fdkaac-1.0.6/configure.ac
--- fdkaac-1.0.0/configure.ac   2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/configure.ac   2024-05-05 17:44:07.000000000 +0200
@@ -6,16 +6,17 @@
 AC_INIT([fdkaac], [XX_VERSION], [honeycom...@gmail.com])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_AUX_DIR([.])
 
 AM_INIT_AUTOMAKE
 
 AC_PROG_CC
 AM_PROG_CC_C_O
+AC_CHECK_TOOL(RC, windres,)
 
 AC_CHECK_HEADERS([sys/time.h])
 AC_CHECK_HEADERS([libcharset.h langinfo.h endian.h byteswap.h])
-AC_CHECK_HEADERS([fdk-aac/aacenc_lib.h], ,
-                 AC_MSG_ERROR([libfdk-aac is required]))
+PKG_CHECK_MODULES([FDK_AAC],[fdk-aac])
 
 AC_C_INLINE
 AC_C_BIGENDIAN
diff -Nru fdkaac-1.0.0/debian/changelog fdkaac-1.0.6/debian/changelog
--- fdkaac-1.0.0/debian/changelog       2020-04-26 11:51:01.000000000 +0200
+++ fdkaac-1.0.6/debian/changelog       2025-05-02 22:00:18.000000000 +0200
@@ -1,3 +1,11 @@
+fdkaac (1.0.6-0.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Import new upstream version, fixing CVE-2022-36148, CVE-2022-37781,
+    CVE-2023-34823, CVE-2023-34824. (Closes: #1017754, #1038951, #1017751)
+
+ -- Bastian Germann <b...@debian.org>  Fri, 02 May 2025 22:00:18 +0200
+
 fdkaac (1.0.0-1) unstable; urgency=medium
 
   * New upstream version. Thanks HÃ¥vard Flaget Aasen.
diff -Nru fdkaac-1.0.0/debian/watch fdkaac-1.0.6/debian/watch
--- fdkaac-1.0.0/debian/watch   2020-04-26 11:34:43.000000000 +0200
+++ fdkaac-1.0.6/debian/watch   2025-05-02 21:59:03.000000000 +0200
@@ -1,4 +1,4 @@
 version=3
 
 opts=filenamemangle=s/.+\/v(\d\S*)\.tar\.gz/fdkaac-$1\.tar\.gz/ \
-  https://github.com/nu774/fdkaac/releases .*/v?(\d\S*)\.tar\.gz
+  https://github.com/nu774/fdkaac/tags .*/v(\d\S*)\.tar\.gz
diff -Nru fdkaac-1.0.0/fdkaac.manifest fdkaac-1.0.6/fdkaac.manifest
--- fdkaac-1.0.0/fdkaac.manifest        1970-01-01 01:00:00.000000000 +0100
+++ fdkaac-1.0.6/fdkaac.manifest        2024-05-05 17:44:07.000000000 +0200
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+  <application xmlns="urn:schemas-microsoft-com:asm.v3">
+    <windowsSettings 
xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings";>
+      <ws2:longPathAware>true</ws2:longPathAware>
+    </windowsSettings>
+  </application>
+</assembly>
diff -Nru fdkaac-1.0.0/fdkaac.rc fdkaac-1.0.6/fdkaac.rc
--- fdkaac-1.0.0/fdkaac.rc      1970-01-01 01:00:00.000000000 +0100
+++ fdkaac-1.0.6/fdkaac.rc      2024-05-05 17:44:07.000000000 +0200
@@ -0,0 +1,3 @@
+#include <winresrc.h>
+
+CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "fdkaac.manifest"
diff -Nru fdkaac-1.0.0/git2changelog.py fdkaac-1.0.6/git2changelog.py
--- fdkaac-1.0.0/git2changelog.py       2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/git2changelog.py       2024-05-05 17:44:07.000000000 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 # Copyright (C) 2013 nu774
 # For conditions of distribution and use, see copyright notice in COPYING
@@ -39,6 +39,6 @@
     commits = parse_gitlog(pipe)
     commits_by_date_author = groupby(commits, key=lambda x: (x.date, x.author))
     for (date, author), commits in commits_by_date_author:
-        output(u'{0}  {1}\n\n'.format(date, author).encode('utf-8'))
+        output(f'{date}  {author}\n\n')
         for c in commits:
-            output(u'  * {0}{1}\n\n'.format(c.subject, c.ref).encode('utf-8'))
+            output(f'  * {c.subject}{c.ref}\n\n')
diff -Nru fdkaac-1.0.0/.github/workflows/ci.yml 
fdkaac-1.0.6/.github/workflows/ci.yml
--- fdkaac-1.0.0/.github/workflows/ci.yml       1970-01-01 01:00:00.000000000 
+0100
+++ fdkaac-1.0.6/.github/workflows/ci.yml       2024-05-05 17:44:07.000000000 
+0200
@@ -0,0 +1,109 @@
+name: CI
+on: [push, pull_request]
+
+jobs:
+  linux:
+    strategy:
+      matrix:
+        version: [20.04, 22.04]
+    runs-on: ubuntu-${{ matrix.version }}
+    steps:
+      - name: Install libfdk-aac
+        run: |
+          sudo apt install libfdk-aac-dev
+      - name: Checkout sources
+        uses: actions/checkout@v3
+      - name: Build
+        run: |
+          autoreconf -fiv
+          ./configure
+          make
+          sudo make install
+      - name: Test
+        run: |
+          fdkaac -b 128 -R -o /dev/null /dev/null
+
+  mingw-cross:
+    strategy:
+      matrix:
+        arch: [i686, x86_64]
+        include:
+          - arch: i686
+            os: mingw32
+          - arch: x86_64
+            os: mingw64
+    runs-on: ubuntu-latest
+    steps:
+      - name: Install cross compiler
+        run: |
+          ARCH=${{ matrix.arch }}
+          sudo apt-get install g++-mingw-w64-${ARCH//_/-}
+      - name: Install libfdk-aac binary from repo.msys.org
+        run: |
+          wget https://repo.msys2.org/mingw/${{ matrix.os }}/${{ matrix.os 
}}.db.tar.zst
+          DESCFILE=$(tar xvf ${{ matrix.os }}.db.tar.zst --wildcards 
'*-fdk-aac*/desc')
+          PKGFILE=$(sed -n '/%FILENAME%/{n;p;q}' $DESCFILE)
+          wget https://repo.msys2.org/mingw/${{ matrix.os }}/${PKGFILE}
+          sudo tar xvf ${PKGFILE} -C /usr/${{ matrix.arch }}-w64-mingw32 
--strip-component=1
+      - name: Checkout
+        uses: actions/checkout@v3
+      - name: Build
+        run: |
+          autoreconf -fiv
+          ./configure --host=${{ matrix.arch }}-w64-mingw32 --prefix=/usr/${{ 
matrix.arch }}-w64-mingw32
+          make
+          sudo make install
+
+  macos:
+    runs-on: macos-latest
+    steps:
+      - name: Install dependencies
+        run: |
+          brew install autoconf automake libtool pkg-config
+          brew install fdk-aac
+      - name: Checkout sources
+        uses: actions/checkout@v3
+      - name: Build
+        run: |
+          autoreconf -fiv
+          ./configure
+          make
+          make install
+      - name: Test
+        run: |
+          fdkaac -b 128 -R -o /dev/null /dev/null
+
+  msys2:
+    runs-on: windows-latest
+    strategy:
+      matrix:
+        sys: [ clang32, clang64, mingw32, mingw64, ucrt64 ]
+    defaults:
+      run:
+        shell: msys2 {0}
+    steps:
+      - name: Setup msys2
+        uses: msys2/setup-msys2@v2
+        with:
+          msystem: ${{ matrix.sys }}
+          update: true
+          install: git
+          pacboy: >-
+            autoconf:
+            automake:
+            libtool:
+            make:
+            cc:p
+            pkg-config:p
+            fdk-aac:p
+      - name: Checkout
+        uses: actions/checkout@v3
+      - name: Build
+        run: |
+          autoreconf -fiv
+          ./configure
+          make
+          make install
+      - name: Test
+        run: |
+          fdkaac -b 128 -R -o /dev/null /dev/null
diff -Nru fdkaac-1.0.0/.gitignore fdkaac-1.0.6/.gitignore
--- fdkaac-1.0.0/.gitignore     2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/.gitignore     2024-05-05 17:44:07.000000000 +0200
@@ -20,3 +20,11 @@
 src/.dirstamp
 stamp-h1
 fdkaac
+.vscode
+fdk-aac
+MSVC/Release
+MSVC/Debug
+MSVC/x64/Release
+MSVC/x64/Debug
+MSVC/fdk-aac
+MSVC/*.vcxproj.user
diff -Nru fdkaac-1.0.0/Makefile.am fdkaac-1.0.6/Makefile.am
--- fdkaac-1.0.0/Makefile.am    2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/Makefile.am    2024-05-05 17:44:07.000000000 +0200
@@ -22,8 +22,13 @@
 
 dist_man_MANS = man/fdkaac.1
 
+fdkaac_CFLAGS = @CFLAGS@ @FDK_AAC_CFLAGS@
+
 fdkaac_LDADD = \
-    @LIBICONV@ @CHARSET_LIB@ -lfdk-aac -lm
+    @LIBICONV@ @CHARSET_LIB@ @FDK_AAC_LIBS@ -lm
+
+.rc.o:
+       $(RC) $< -o $@
 
 if FDK_PLATFORM_POSIX
     fdkaac_SOURCES += \
@@ -33,6 +38,7 @@
 if FDK_PLATFORM_WIN32
     fdkaac_SOURCES += \
        src/compat_win32.c
+    fdkaac_SOURCES += fdkaac.rc
 endif
 
 if FDK_NO_GETOPT_LONG
diff -Nru fdkaac-1.0.0/MSVC/fdk-aac.vcxproj fdkaac-1.0.6/MSVC/fdk-aac.vcxproj
--- fdkaac-1.0.0/MSVC/fdk-aac.vcxproj   2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/MSVC/fdk-aac.vcxproj   2024-05-05 17:44:07.000000000 +0200
@@ -24,6 +24,8 @@
     <RootNamespace>fdk-aac</RootNamespace>
   </PropertyGroup>
   <PropertyGroup>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '17.0'">v143</PlatformToolset>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '16.0'">v142</PlatformToolset>
     <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '15.0'">v141_xp</PlatformToolset>
     <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '14.0'">v140_xp</PlatformToolset>
     <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '12.0'">v120_xp</PlatformToolset>
diff -Nru fdkaac-1.0.0/MSVC/fdkaac.vcxproj fdkaac-1.0.6/MSVC/fdkaac.vcxproj
--- fdkaac-1.0.0/MSVC/fdkaac.vcxproj    2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/MSVC/fdkaac.vcxproj    2024-05-05 17:44:07.000000000 +0200
@@ -24,6 +24,8 @@
     <RootNamespace>fdkaac</RootNamespace>
   </PropertyGroup>
   <PropertyGroup>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '17.0'">v143</PlatformToolset>
+    <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '16.0'">v142</PlatformToolset>
     <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '15.0'">v141_xp</PlatformToolset>
     <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '14.0'">v140_xp</PlatformToolset>
     <PlatformToolset Condition="'$(PlatformToolset)' == '' and 
'$(MSBuildToolsVersion)' == '12.0'">v120_xp</PlatformToolset>
@@ -54,6 +56,9 @@
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
     </Link>
+    <Manifest>
+      <AdditionalManifestFiles>..\fdkaac.manifest 
%(AdditionalManifestFiles)</AdditionalManifestFiles>
+    </Manifest>
     <PreBuildEvent>
       <Command>copy ..\fdk-aac\libAACdec\include\aacdecoder_lib.h 
include\fdk-aac\
 copy ..\fdk-aac\libAACenc\include\aacenc_lib.h include\fdk-aac\
diff -Nru fdkaac-1.0.0/src/aacenc.c fdkaac-1.0.6/src/aacenc.c
--- fdkaac-1.0.0/src/aacenc.c   2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/aacenc.c   2024-05-05 17:44:07.000000000 +0200
@@ -247,7 +247,7 @@
 
 int aac_encode_frame(HANDLE_AACENCODER encoder,
                      const pcm_sample_description_t *format,
-                     const int16_t *input, unsigned iframes,
+                     const INT_PCM *input, unsigned iframes,
                      aacenc_frame_t *output)
 {
     uint32_t ilen = iframes * format->channels_per_frame;
@@ -258,9 +258,9 @@
     void *obufs[1];
     INT ibuf_ids[] = { IN_AUDIO_DATA };
     INT obuf_ids[] = { OUT_BITSTREAM_DATA };
-    INT ibuf_sizes[] = { ilen * sizeof(int16_t) };
+    INT ibuf_sizes[] = { ilen * sizeof(INT_PCM) };
     INT obuf_sizes[1];
-    INT ibuf_el_sizes[] = { sizeof(int16_t) };
+    INT ibuf_el_sizes[] = { sizeof(INT_PCM) };
     INT obuf_el_sizes[] = { 1 };
     AACENC_ERROR err;
     unsigned channel_mode, obytes;
diff -Nru fdkaac-1.0.0/src/aacenc.h fdkaac-1.0.6/src/aacenc.h
--- fdkaac-1.0.0/src/aacenc.h   2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/aacenc.h   2024-05-05 17:44:07.000000000 +0200
@@ -50,7 +50,7 @@
 
 int aac_encode_frame(HANDLE_AACENCODER encoder,
                      const pcm_sample_description_t *format,
-                     const int16_t *input, unsigned iframes,
+                     const INT_PCM *input, unsigned iframes,
                      aacenc_frame_t *output);
 
 #endif
diff -Nru fdkaac-1.0.0/src/caf_reader.c fdkaac-1.0.6/src/caf_reader.c
--- fdkaac-1.0.0/src/caf_reader.c       2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/caf_reader.c       2024-05-05 17:44:07.000000000 +0200
@@ -75,8 +75,10 @@
     ENSURE(mFormatID == M4AF_FOURCC('l','p','c','m'));
     ENSURE(mSampleRate && mBytesPerPacket &&
            mChannelsPerFrame >= 1 && mChannelsPerFrame <= 8 &&
-           mBitsPerChannel && mFramesPerPacket == 1 &&
+           mBitsPerChannel > 0 && mBitsPerChannel < 256 &&
+           mFramesPerPacket == 1 &&
            mBytesPerPacket % mChannelsPerFrame == 0 &&
+           mBytesPerPacket < 256 &&
            mBytesPerPacket >= mChannelsPerFrame * ((mBitsPerChannel + 7) / 8));
 
     desc->sample_rate        = mSampleRate;
@@ -103,10 +105,14 @@
 {
     char *buf, *key, *val, *end;
     size_t len;
+    int n;
 
-    if (chunk_size < 4 || (buf = malloc(chunk_size)) == 0)
+    if (chunk_size < 4 || (buf = malloc(chunk_size+1)) == 0)
         return -1;
-    pcm_read(&reader->io, buf, chunk_size);
+    n = pcm_read(&reader->io, buf, chunk_size);
+    if (n != chunk_size)
+        return -1;
+    buf[n] = 0;
     key = buf + 4;
     end = buf + chunk_size;
     do {
@@ -172,6 +178,7 @@
 {
     uint32_t fcc;
     int64_t chunk_size;
+    int desc_seen = 0;
 
     *data_length = 0;
 
@@ -181,9 +188,10 @@
     TRY_IO(pcm_skip(&reader->io, 4)); /* mFileVersion, mFileFlags */
 
     while ((fcc = caf_next_chunk(reader, &chunk_size)) != 0) {
-        if (fcc == M4AF_FOURCC('d','e','s','c'))
+        if (fcc == M4AF_FOURCC('d','e','s','c')) {
+            desc_seen = 1;
             TRY_IO(caf_desc(reader, chunk_size));
-        else if (fcc == M4AF_FOURCC('i','n','f','o'))
+        } else if (fcc == M4AF_FOURCC('i','n','f','o'))
             TRY_IO(caf_info(reader, chunk_size));
         else if (fcc == M4AF_FOURCC('c','h','a','n')) {
             ENSURE(reader->sample_format.channels_per_frame);
@@ -199,7 +207,7 @@
             TRY_IO(pcm_skip(&reader->io, chunk_size));
     }
     ENSURE(reader->sample_format.channels_per_frame);
-    ENSURE(fcc == M4AF_FOURCC('d','a','t','a'));
+    ENSURE(desc_seen && fcc == M4AF_FOURCC('d','a','t','a'));
     return 0;
 FAIL:
     return -1;
diff -Nru fdkaac-1.0.0/src/catypes.h fdkaac-1.0.6/src/catypes.h
--- fdkaac-1.0.0/src/catypes.h  2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/catypes.h  2024-05-05 17:44:07.000000000 +0200
@@ -207,7 +207,6 @@
     kAudioChannelLayoutTag_AudioUnit_5_0            = 
kAudioChannelLayoutTag_MPEG_5_0_B,    // L R Ls Rs C
     kAudioChannelLayoutTag_AudioUnit_6_0            = (139L<<16) | 6,          
             // L R Ls Rs C Cs
     kAudioChannelLayoutTag_AudioUnit_7_0            = (140L<<16) | 7,          
             // L R Ls Rs C Rls Rrs
-    kAudioChannelLayoutTag_AudioUnit_7_0_Front      = (148L<<16) | 7,          
             // L R Ls Rs C Lc Rc
     kAudioChannelLayoutTag_AudioUnit_5_1            = 
kAudioChannelLayoutTag_MPEG_5_1_A,    // L R C LFE Ls Rs
     kAudioChannelLayoutTag_AudioUnit_6_1            = 
kAudioChannelLayoutTag_MPEG_6_1_A,    // L R C LFE Ls Rs Cs
     kAudioChannelLayoutTag_AudioUnit_7_1            = 
kAudioChannelLayoutTag_MPEG_7_1_C,    // L R C LFE Ls Rs Rls Rrs
@@ -227,6 +226,10 @@
     kAudioChannelLayoutTag_TMH_10_2_std             = (145L<<16) | 16,         
             // L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2
     kAudioChannelLayoutTag_TMH_10_2_full            = (146L<<16) | 21,         
             // TMH_10_2_std plus: Lc Rc HI VI Haptic
 
+    kAudioChannelLayoutTag_DiscreteInOrder          = (147L<<16) | 0,          
             // needs to be ORed with the actual number of channels
+
+    kAudioChannelLayoutTag_AudioUnit_7_0_Front      = (148L<<16) | 7,          
             // L R Ls Rs C Lc Rc
+
     kAudioChannelLayoutTag_AC3_1_0_1                = (149L<<16) | 2,          
             // C LFE
     kAudioChannelLayoutTag_AC3_3_0                  = (150L<<16) | 3,          
             // L C R
     kAudioChannelLayoutTag_AC3_3_1                  = (151L<<16) | 4,          
             // L C R Cs
@@ -234,7 +237,53 @@
     kAudioChannelLayoutTag_AC3_2_1_1                = (153L<<16) | 4,          
             // L R Cs LFE
     kAudioChannelLayoutTag_AC3_3_1_1                = (154L<<16) | 5,          
             // L C R Cs LFE
 
-    kAudioChannelLayoutTag_DiscreteInOrder          = (147L<<16) | 0,          
             // needs to be ORed with the actual number of channels  
+    kAudioChannelLayoutTag_EAC_6_0_A                = (155<<16) | 6,           
             // L C R Ls Rs Cs
+    kAudioChannelLayoutTag_EAC_7_0_A                = (156<<16) | 7,           
             // L C R Ls Rs Rls Rrs
+
+    kAudioChannelLayoutTag_EAC3_6_1_A               = (157<<16) | 7,           
             // L C R Ls Rs LFE Cs
+    kAudioChannelLayoutTag_EAC3_6_1_B               = (158<<16) | 7,           
             // L C R Ls Rs LFE Ts
+    kAudioChannelLayoutTag_EAC3_6_1_C               = (159<<16) | 7,           
             // L C R Ls Rs LFE Vhc
+    kAudioChannelLayoutTag_EAC3_7_1_A               = (160<<16) | 8,           
             // L C R Ls Rs LFE Rls Rrs
+    kAudioChannelLayoutTag_EAC3_7_1_B               = (161<<16) | 8,           
             // L C R Ls Rs LFE Lc Rc
+    kAudioChannelLayoutTag_EAC3_7_1_C               = (162<<16) | 8,           
             // L C R Ls Rs LFE Lsd Rsd
+    kAudioChannelLayoutTag_EAC3_7_1_D               = (163<<16) | 8,           
             // L C R Ls Rs LFE Lw Rw
+    kAudioChannelLayoutTag_EAC3_7_1_E               = (164<<16) | 8,           
             // L C R Ls Rs LFE Vhl Vhr
+
+    kAudioChannelLayoutTag_EAC3_7_1_F               = (165<<16) | 8,           
             // L C R Ls Rs LFE Cs Ts
+    kAudioChannelLayoutTag_EAC3_7_1_G               = (166<<16) | 8,           
             // L C R Ls Rs LFE Cs Vhc
+    kAudioChannelLayoutTag_EAC3_7_1_H               = (167<<16) | 8,           
             // L C R Ls Rs LFE Ts Vhc
+
+    kAudioChannelLayoutTag_DTS_3_1                  = (168<<16) | 4,           
             // C L R LFE
+    kAudioChannelLayoutTag_DTS_4_1                  = (169<<16) | 5,           
             // C L R Cs LFE
+    kAudioChannelLayoutTag_DTS_6_0_A                = (170<<16) | 6,           
             // Lc Rc L R Ls Rs
+    kAudioChannelLayoutTag_DTS_6_0_B                = (171<<16) | 6,           
             // C L R Rls Rrs Ts
+    kAudioChannelLayoutTag_DTS_6_0_C                = (172<<16) | 6,           
             // C Cs L R Rls Rrs
+    kAudioChannelLayoutTag_DTS_6_1_A                = (173<<16) | 7,           
             // Lc Rc L R Ls Rs LFE
+    kAudioChannelLayoutTag_DTS_6_1_B                = (174<<16) | 7,           
             // C L R Rls Rrs Ts LFE
+    kAudioChannelLayoutTag_DTS_6_1_C                = (175<<16) | 7,           
             // C Cs L R Rls Rrs LFE
+    kAudioChannelLayoutTag_DTS_7_0                  = (176<<16) | 7,           
             // Lc C Rc L R Ls Rs
+    kAudioChannelLayoutTag_DTS_7_1                  = (177<<16) | 8,           
             // Lc C Rc L R Ls Rs LFE
+    kAudioChannelLayoutTag_DTS_8_0_A                = (178<<16) | 8,           
             // Lc Rc L R Ls Rs Rls Rrs
+    kAudioChannelLayoutTag_DTS_8_0_B                = (179<<16) | 8,           
             // Lc C Rc L R Ls Cs Rs
+    kAudioChannelLayoutTag_DTS_8_1_A                = (180<<16) | 9,           
             // Lc Rc L R Ls Rs Rls Rrs LFE
+    kAudioChannelLayoutTag_DTS_8_1_B                = (181<<16) | 9,           
             // Lc C Rc L R Ls Cs Rs LFE
+    kAudioChannelLayoutTag_DTS_6_1_D                = (182<<16) | 7,           
             // C L R Ls Rs LFE Cs
+
+    kAudioChannelLayoutTag_AAC_7_1_B                = (183<<16) | 8,           
             // C L R Ls Rs Rls Rrs LFE
+    kAudioChannelLayoutTag_AAC_7_1_C                = (184<<16) | 8,           
             // C L R Ls Rs LFE Vhl Vhr
+
+    kAudioChannelLayoutTag_WAVE_4_0_B               = (185<<16) | 4,           
             // L R Rls Rrs
+    kAudioChannelLayoutTag_WAVE_5_0_B               = (186<<16) | 5,           
             // L R C Rls Rrs
+    kAudioChannelLayoutTag_WAVE_5_1_B               = (187<<16) | 6,           
             // L R C LFE Rls Rrs
+    kAudioChannelLayoutTag_WAVE_6_1                 = (188<<16) | 7,           
             // L R C LFE Cs Ls Rs
+    kAudioChannelLayoutTag_WAVE_7_1                 = (189<<16) | 8,           
             // L R C LFE Rls Rrs Ls Rs
+
+    kAudioChannelLayoutTag_Logic_4_0_C              = (197U<<16) | 4,          
             // L R Cs C
+    kAudioChannelLayoutTag_Logic_6_0_B              = (198U<<16) | 6,          
             // L R Ls Rs Cs C
+    kAudioChannelLayoutTag_Logic_6_1_B              = (199U<<16) | 7,          
             // L R Ls Rs Cs C LFE
+    kAudioChannelLayoutTag_Logic_6_1_D              = (200U<<16) | 7,          
             // L C R Ls Cs Rs LFE
+    kAudioChannelLayoutTag_Logic_7_1_B              = (201U<<16) | 8,          
             // L R Ls Rs Rls Rrs C LFE
+
     kAudioChannelLayoutTag_Unknown                  = 0xFFFF0000               
             // needs to be ORed with the actual number of channels  
 };
 
diff -Nru fdkaac-1.0.0/src/extrapolater.c fdkaac-1.0.6/src/extrapolater.c
--- fdkaac-1.0.0/src/extrapolater.c     2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/extrapolater.c     2024-05-05 17:44:07.000000000 +0200
@@ -144,17 +144,22 @@
     assert(bp->count <= nframes);
     memcpy(buffer, bp->data, bp->count * sfmt->bytes_per_frame); 
     if (!fetch(self, nframes)) {
+        // got EOF
         buffer_t *bbp = &self->buffer[self->nbuffer];
         if (bp->count < 2 * LPC_ORDER) {
+            // final frame is too short, so we join with the pre-final frame
             size_t total = bp->count + bbp->count;
             if (bbp->count &&
                 realloc_buffer(bbp, total * sfmt->bytes_per_frame) == 0 &&
                 realloc_buffer(bp, total * sfmt->bytes_per_frame) == 0)
             {
                 memcpy(bbp->data + bbp->count * sfmt->channels_per_frame,
-                       bp->data, bp->count * sfmt->bytes_per_frame);
-                memcpy(bp->data, bbp->data, total * sfmt->bytes_per_frame);
-                bp->count = total;
+                       bp->data,
+                       bp->count * sfmt->bytes_per_frame);
+                memcpy(bp->data,
+                       bbp->data + bp->count * sfmt->channels_per_frame,
+                       bbp->count * sfmt->bytes_per_frame);
+                bp->count = bbp->count;
             }
         }
         if (bp->count >= 2 * LPC_ORDER)
diff -Nru fdkaac-1.0.0/src/m4af.c fdkaac-1.0.6/src/m4af.c
--- fdkaac-1.0.0/src/m4af.c     2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/m4af.c     2024-05-05 17:44:07.000000000 +0200
@@ -223,7 +223,7 @@
 }
 
 m4af_ctx_t *m4af_create(uint32_t codec, uint32_t timescale,
-                        m4af_io_callbacks_t *io, void *io_cookie)
+                        m4af_io_callbacks_t *io, void *io_cookie, int 
no_timestamp)
 {
     m4af_ctx_t *ctx;
     int64_t timestamp;
@@ -237,7 +237,7 @@
     memcpy(&ctx->io, io, sizeof(m4af_io_callbacks_t));
     ctx->io_cookie = io_cookie;
     ctx->timescale = timescale;
-    timestamp = m4af_timestamp();
+    timestamp = no_timestamp ? 0 : m4af_timestamp();
     ctx->creation_time = timestamp;
     ctx->modification_time = timestamp;
     ctx->num_tracks = 1;
@@ -1103,8 +1103,10 @@
 {
     m4af_track_t *track = &ctx->track[track_idx];
     int64_t pos = m4af_tell(ctx);
-    int64_t duration =
-        (double)track->duration / track->timescale * ctx->timescale + .5;
+    int64_t duration = track->duration;
+    if (ctx->priming_mode & M4AF_PRIMING_MODE_EDTS)
+        duration -= (track->encoder_delay + track->padding);
+    duration = (double)duration / track->timescale * ctx->timescale + .5;
     uint8_t version = (track->creation_time > UINT32_MAX ||
                        track->modification_time > UINT32_MAX ||
                        duration > UINT32_MAX);
@@ -1169,6 +1171,8 @@
     unsigned i;
     for (i = 0; i < ctx->num_tracks; ++i) {
         double x = ctx->track[i].duration;
+        if (ctx->priming_mode & M4AF_PRIMING_MODE_EDTS)
+            x -= (ctx->track[i].encoder_delay + ctx->track[i].padding);
         int64_t duration = x / ctx->track[i].timescale * ctx->timescale + .5;
         if (duration > movie_duration)
             movie_duration = duration;
diff -Nru fdkaac-1.0.0/src/m4af.h fdkaac-1.0.6/src/m4af.h
--- fdkaac-1.0.0/src/m4af.h     2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/m4af.h     2024-05-05 17:44:07.000000000 +0200
@@ -75,7 +75,7 @@
 
 
 m4af_ctx_t *m4af_create(uint32_t codec, uint32_t timescale,
-                        m4af_io_callbacks_t *io, void *io_cookie);
+                        m4af_io_callbacks_t *io, void *io_cookie, int 
no_timestamp);
 
 int m4af_begin_write(m4af_ctx_t *ctx);
 
diff -Nru fdkaac-1.0.0/src/main.c fdkaac-1.0.6/src/main.c
--- fdkaac-1.0.0/src/main.c     2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/main.c     2024-05-05 17:44:07.000000000 +0200
@@ -121,10 +121,9 @@
 " -m, --bitrate-mode <n>        Bitrate configuration\n"
 "                                 0: CBR (default)\n"
 "                                 1-5: VBR\n"
-"                               (VBR mode is not officially supported, and\n"
-"                                works only on a certain combination of\n"
-"                                parameter settings, sample rate, and\n"
-"                                channel configuration)\n"
+"                               (VBR mode 1 is tuned for HE-AAC v2\n"
+"                                VBR mode 2 is tuned for HE-AAC\n"
+"                                VBR mode 3 or greater is for AAC LC)\n"
 " -w, --bandwidth <n>           Frequency bandwidth in Hz (AAC LC only)\n"
 " -a, --afterburner <n>         Afterburner\n"
 "                                 0: Off\n"
@@ -159,6 +158,7 @@
 " -I, --ignorelength            Ignore length of WAV header\n"
 " -S, --silent                  Don't print progress messages\n"
 " --moov-before-mdat            Place moov box before mdat box on m4a output\n"
+" --no-timestamp                Don't inject timestamp in the file\n"
 "\n"
 "Options for raw (headerless) input:\n"
 " -R, --raw                     Treat input as raw (by default WAV is\n"
@@ -221,6 +221,8 @@
     unsigned raw_rate;
     const char *raw_format;
 
+    int no_timestamp;
+
     aacenc_tag_store_t tags;
     aacenc_tag_store_t source_tags;
     aacenc_translate_generic_text_tag_ctx_t source_tag_ctx;
@@ -244,7 +246,7 @@
 #define OPT_LONG_TAG             M4AF_FOURCC('l','t','a','g')
 #define OPT_TAG_FROM_JSON        M4AF_FOURCC('t','f','j','s')
 
-    static struct option long_options[] = {
+    static const struct option long_options[] = {
         { "help",             no_argument,       0, 'h' },
         { "profile",          required_argument, 0, 'p' },
         { "bitrate",          required_argument, 0, 'b' },
@@ -284,6 +286,8 @@
         { "tag-from-file",    required_argument, 0, OPT_SHORT_TAG_FILE     },
         { "long-tag",         required_argument, 0, OPT_LONG_TAG           },
         { "tag-from-json",    required_argument, 0, OPT_TAG_FROM_JSON      },
+
+        { "no-timestamp",     no_argument,       0, '#' },
         { 0,                  0,                 0, 0                      },
     };
     params->afterburner = 1;
@@ -456,6 +460,9 @@
         case OPT_TAG_FROM_JSON:
             params->json_filename = optarg;
             break;
+        case '#':
+            params->no_timestamp = 1;
+            break;
         default:
             return usage(), -1;
         }
@@ -513,7 +520,7 @@
            HANDLE_AACENCODER encoder, uint32_t frame_length, 
            m4af_ctx_t *m4af)
 {
-    int16_t *ibuf = 0, *ip;
+    INT_PCM *ibuf = 0, *ip;
     aacenc_frame_t obuf[2] = {{ 0 }}, *obp;
     unsigned flip = 0;
     int nread = 1;
@@ -833,7 +840,7 @@
         unsigned framelen = aacinfo.frameLength;
         scale = sample_format->sample_rate >> scale_shift;
         if ((m4af = m4af_create(M4AF_CODEC_MP4A, scale, &m4af_io,
-                                params.output_fp)) < 0)
+                                params.output_fp, params.no_timestamp)) < 0)
             goto END;
         m4af_set_num_channels(m4af, 0, sample_format->channels_per_frame);
         m4af_set_fixed_frame_duration(m4af, 0, framelen >> scale_shift);
diff -Nru fdkaac-1.0.0/src/pcm_readhelper.c fdkaac-1.0.6/src/pcm_readhelper.c
--- fdkaac-1.0.0/src/pcm_readhelper.c   2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/pcm_readhelper.c   2024-05-05 17:44:07.000000000 +0200
@@ -60,6 +60,8 @@
 
     if (count == 0 || pcm_seek(io, count, SEEK_CUR) >= 0)
         return 0;
+    if (count < 0)
+        return -1;
     do {
         if ((rc = vp->read(io->cookie, buff, count > 8192 ? 8192 : count)) > 0)
             count -= rc;
@@ -293,6 +295,10 @@
             layout = "\x03\x01\x02\x09"; break;
         case kAudioChannelLayoutTag_AC3_3_1:
             layout = "\x01\x03\x02\x09"; break;
+        case kAudioChannelLayoutTag_WAVE_4_0_B:
+            layout = "\x01\x02\x05\x06"; break;
+        case kAudioChannelLayoutTag_Logic_4_0_C:
+            layout = "\x01\x02\x09\x03"; break;
         /* 4.1ch */
         case kAudioChannelLayoutTag_DVD_6:
             layout = "\x01\x02\x04\x0A\x0B"; break;
@@ -302,6 +308,8 @@
             layout = "\x01\x02\x03\x04\x09"; break;
         case kAudioChannelLayoutTag_AC3_3_1_1:
             layout = "\x01\x03\x02\x09\x04"; break;
+        case kAudioChannelLayoutTag_DTS_4_1:
+            layout = "\x03\x01\x02\x09\x04"; break;
         /* 5ch */
         case kAudioChannelLayoutTag_MPEG_5_0_A:
             layout = "\x01\x02\x03\x0A\x0B"; break;
@@ -312,6 +320,8 @@
             layout = "\x01\x03\x02\x0A\x0B"; break;
         case kAudioChannelLayoutTag_MPEG_5_0_D:
             layout = "\x03\x01\x02\x0A\x0B"; break;
+        case kAudioChannelLayoutTag_WAVE_5_0_B:
+            layout = "\x01\x02\x03\x05\x06"; break;
         /* 5.1ch */
         case kAudioChannelLayoutTag_MPEG_5_1_A:
             layout = "\x01\x02\x03\x04\x0A\x0B"; break;
@@ -321,17 +331,49 @@
             layout = "\x01\x03\x02\x0A\x0B\x04"; break;
         case kAudioChannelLayoutTag_MPEG_5_1_D:
             layout = "\x03\x01\x02\x0A\x0B\x04"; break;
+        case kAudioChannelLayoutTag_WAVE_5_1_B:
+            layout = "\x01\x02\x03\x04\x05\x06"; break;
         /* 6ch */
         case kAudioChannelLayoutTag_Hexagonal:
         case kAudioChannelLayoutTag_AudioUnit_6_0:
             layout = "\x01\x02\x0A\x0B\x03\x09"; break;
         case kAudioChannelLayoutTag_AAC_6_0:
             layout = "\x03\x01\x02\x0A\x0B\x09"; break;
+        case kAudioChannelLayoutTag_EAC_6_0_A:
+            layout = "\x01\x03\x02\x0A\x0B\x09"; break;
+        case kAudioChannelLayoutTag_DTS_6_0_A:
+            layout = "\x07\x08\x01\x02\x0A\x0B"; break;
+        case kAudioChannelLayoutTag_DTS_6_0_B:
+            layout = "\x03\x01\x02\x05\x06\x0C"; break;
+        case kAudioChannelLayoutTag_DTS_6_0_C:
+            layout = "\x03\x09\x01\x02\x05\x06"; break;
+        case kAudioChannelLayoutTag_Logic_6_0_B:
+            layout = "\x01\x02\x0A\x0B\x09\x03"; break;
         /* 6.1ch */
         case kAudioChannelLayoutTag_MPEG_6_1_A:
             layout = "\x01\x02\x03\x04\x0A\x0B\x09"; break;
         case kAudioChannelLayoutTag_AAC_6_1:
             layout = "\x03\x01\x02\x0A\x0B\x09\x04"; break;
+        case kAudioChannelLayoutTag_EAC3_6_1_A:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x09"; break;
+        case kAudioChannelLayoutTag_EAC3_6_1_B:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x0C"; break;
+        case kAudioChannelLayoutTag_EAC3_6_1_C:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x0E"; break;
+        case kAudioChannelLayoutTag_DTS_6_1_A:
+            layout = "\x07\x08\x01\x02\x0A\x0B\x04"; break;
+        case kAudioChannelLayoutTag_DTS_6_1_B:
+            layout = "\x03\x01\x02\x05\x06\x0C\x04"; break;
+        case kAudioChannelLayoutTag_DTS_6_1_C:
+            layout = "\x03\x09\x01\x02\x05\x06\x04"; break;
+        case kAudioChannelLayoutTag_DTS_6_1_D:
+            layout = "\x03\x01\x02\x0A\x0B\x04\x09"; break;
+        case kAudioChannelLayoutTag_WAVE_6_1:
+            layout = "\x01\x02\x03\x04\x09\x0A\x0B"; break;
+        case kAudioChannelLayoutTag_Logic_6_1_B:
+            layout = "\x01\x02\x0A\x0B\x09\x03\x04"; break;
+        case kAudioChannelLayoutTag_Logic_6_1_D:
+            layout = "\x01\x03\x02\x0A\x09\x0B\x04"; break;
         /* 7ch */
         case kAudioChannelLayoutTag_AudioUnit_7_0:
             layout = "\x01\x02\x0A\x0B\x03\x05\x06"; break;
@@ -339,6 +381,10 @@
             layout = "\x01\x02\x0A\x0B\x03\x07\x08"; break;
         case kAudioChannelLayoutTag_AAC_7_0:
             layout = "\x03\x01\x02\x0A\x0B\x05\x06"; break;
+        case kAudioChannelLayoutTag_EAC_7_0_A:
+            layout = "\x01\x03\x02\x0A\x0B\x05\x06"; break;
+        case kAudioChannelLayoutTag_DTS_7_0:
+            layout = "\x07\x03\x08\x01\x02\x0A\x0B"; break;
         /* 7.1ch */
         case kAudioChannelLayoutTag_MPEG_7_1_A:
             layout = "\x01\x02\x03\x04\x0A\x0B\x07\x08"; break;
@@ -348,11 +394,37 @@
             layout = "\x01\x02\x03\x04\x0A\x0B\x05\x06"; break;
         case kAudioChannelLayoutTag_Emagic_Default_7_1:
             layout = "\x01\x02\x0A\x0B\x03\x04\x07\x08"; break;
+        case kAudioChannelLayoutTag_AAC_7_1_B:
+            layout = "\x03\x01\x02\x0A\x0B\x05\x06\x04"; break;
+        case kAudioChannelLayoutTag_AAC_7_1_C:
+            layout = "\x03\x01\x02\x0A\x0B\x04\x0D\x0F"; break;
+        case kAudioChannelLayoutTag_EAC3_7_1_A:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x05\x06"; break;
+        case kAudioChannelLayoutTag_EAC3_7_1_B:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x07\x08"; break;
+        case kAudioChannelLayoutTag_EAC3_7_1_E:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x0D\x0F"; break;
+        case kAudioChannelLayoutTag_EAC3_7_1_F:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x09\x0C"; break;
+        case kAudioChannelLayoutTag_EAC3_7_1_G:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x09\x0E"; break;
+        case kAudioChannelLayoutTag_EAC3_7_1_H:
+            layout = "\x01\x03\x02\x0A\x0B\x04\x0C\x0E"; break;
+        case kAudioChannelLayoutTag_DTS_7_1:
+            layout = "\x07\x03\x08\x01\x02\x0A\x0B\x04"; break;
+        case kAudioChannelLayoutTag_WAVE_7_1:
+            layout = "\x01\x02\x03\x04\x05\x06\x0A\x0B"; break;
+        case kAudioChannelLayoutTag_Logic_7_1_B:
+            layout = "\x01\x02\x0A\x0B\x05\x06\x03\x04"; break;
         /* 8ch */
         case kAudioChannelLayoutTag_Octagonal:
             layout = "\x01\x02\x05\x06\x03\x09\x0A\x0B"; break;
         case kAudioChannelLayoutTag_AAC_Octagonal:
             layout = "\x03\x01\x02\x0A\x0B\x05\x06\x09"; break;
+        case kAudioChannelLayoutTag_DTS_8_0_A:
+            layout = "\x07\x08\x01\x02\x0A\x0B\x05\x06"; break;
+        case kAudioChannelLayoutTag_DTS_8_0_B:
+            layout = "\x07\x03\x08\x01\x02\x0A\x09\x0B"; break;
         default:
             goto FAIL;
         }
diff -Nru fdkaac-1.0.0/src/pcm_sint16_converter.c 
fdkaac-1.0.6/src/pcm_sint16_converter.c
--- fdkaac-1.0.0/src/pcm_sint16_converter.c     2018-09-03 19:04:36.000000000 
+0200
+++ fdkaac-1.0.6/src/pcm_sint16_converter.c     2024-05-05 17:44:07.000000000 
+0200
@@ -10,6 +10,8 @@
 #if HAVE_STDINT_H
 #  include <stdint.h>
 #endif
+#include <assert.h>
+#include <fdk-aac/aacenc_lib.h>
 #include "pcm_reader.h"
 
 typedef struct pcm_sint16_converter_t {
@@ -57,12 +59,18 @@
     count = nframes * sfmt->channels_per_frame;
     if (PCM_IS_FLOAT(sfmt)) {
         float   *ip = self->pivot;
-        int16_t *op = buffer;
+        INT_PCM *op = buffer;
+#if SAMPLE_BITS == 16
         for (i = 0; i < count; ++i)
-            op[i] = pcm_clip(ip[i] * 32768.0, -32768.0, 32767.0);
+            op[i] = (int16_t)pcm_clip(ip[i] * 32768.0, -32768.0, 32767.0);
+#else
+        for (i = 0; i < count; ++i)
+            op[i] = (int32_t)pcm_clip(ip[i] * 2147483648.0, -2147483648.0, 
2147483647.0);
+#endif
     } else {
         int32_t *ip = self->pivot;
-        int16_t *op = buffer;
+        INT_PCM *op = buffer;
+#if SAMPLE_BITS == 16
         if (sfmt->bits_per_channel <= 16) {
             for (i = 0; i < count; ++i)
                 op[i] = ip[i] >> 16;
@@ -72,6 +80,10 @@
                 op[i] = (n == 0x8000) ? 0x7fff : n;
             }
         }
+#else
+        for (i = 0; i < count; ++i)
+            op[i] = ip[i];
+#endif
     }
     return nframes;
 }
@@ -94,14 +106,16 @@
     pcm_sint16_converter_t *self = 0;
     pcm_sample_description_t *fmt;
 
+    assert((SAMPLE_BITS>>3) == sizeof(INT_PCM));
+
     if ((self = calloc(1, sizeof(pcm_sint16_converter_t))) == 0)
         return 0;
     self->src = reader;
     self->vtbl = &my_vtable;
     memcpy(&self->format, pcm_get_format(reader), sizeof(self->format));
     fmt = &self->format;
-    fmt->bits_per_channel = 16;
+    fmt->bits_per_channel = SAMPLE_BITS;
     fmt->sample_type = PCM_TYPE_SINT;
-    fmt->bytes_per_frame = 2 * fmt->channels_per_frame;
+    fmt->bytes_per_frame = sizeof(INT_PCM) * fmt->channels_per_frame;
     return (pcm_reader_t *)self;
 }
diff -Nru fdkaac-1.0.0/src/wav_reader.c fdkaac-1.0.6/src/wav_reader.c
--- fdkaac-1.0.0/src/wav_reader.c       2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/src/wav_reader.c       2024-05-05 17:44:07.000000000 +0200
@@ -113,8 +113,10 @@
     wValidBitsPerSample = wBitsPerSample;
 
     ENSURE(wFormatTag == 1 || wFormatTag == 3 || wFormatTag == 0xfffe);
-    ENSURE(nChannels && nSamplesPerSec && nAvgBytesPerSec &&
-           nBlockAlign && wBitsPerSample && !(wBitsPerSample & 7) &&
+    ENSURE(nChannels > 0 && nChannels <= 8 &&
+           nSamplesPerSec && nAvgBytesPerSec &&
+           nBlockAlign && nBlockAlign < 256 &&
+           wBitsPerSample && wBitsPerSample < 256 && !(wBitsPerSample & 7) &&
            nBlockAlign == nChannels * wBitsPerSample / 8);
 
     if (wFormatTag == 3)
@@ -155,6 +157,7 @@
 int wav_parse(wav_reader_t *reader, int64_t *data_length)
 {
     uint32_t container, fcc, chunk_size;
+    int fmt_seen = 0;
 
     *data_length = 0;
     container = riff_next_chunk(reader, &chunk_size);
@@ -167,6 +170,7 @@
         riff_ds64(reader, data_length);
     while ((fcc = riff_next_chunk(reader, &chunk_size)) != 0) {
         if (fcc == RIFF_FOURCC('f','m','t',' ')) {
+            fmt_seen = 1;
             if (wav_fmt(reader, chunk_size) < 0)
                 goto FAIL;
         } else if (fcc == RIFF_FOURCC('d','a','t','a')) {
@@ -178,8 +182,8 @@
             TRY_IO(pcm_skip(&reader->io, (chunk_size + 1) & ~1));
         }
     }
-    if (fcc == RIFF_FOURCC('d','a','t','a'))
-        return 0;
+    ENSURE(fmt_seen && fcc == RIFF_FOURCC('d', 'a', 't', 'a'));
+    return 0;
 FAIL:
     return -1;
 }
diff -Nru fdkaac-1.0.0/version.h fdkaac-1.0.6/version.h
--- fdkaac-1.0.0/version.h      2018-09-03 19:04:36.000000000 +0200
+++ fdkaac-1.0.6/version.h      2024-05-05 17:44:07.000000000 +0200
@@ -1,4 +1,4 @@
 #ifndef VERSION_H
 #define VERSION_H
-const char *fdkaac_version = "1.0.0";
+const char *fdkaac_version = "1.0.6";
 #endif

Reply via email to