Sunday, April 03, 2022

Re: UPDATE: libsndfile 1.1.0beta2

I have committed this.

Jan, do you want to stay listed as maintainer?



On 2022/03/29 08:46, Stuart Henderson wrote:
> CC'ing MAINTAINER, any comments?
>
> On 2022/03/28 23:54, Brad Smith wrote:
> > On Thu, Mar 17, 2022 at 01:40:12AM -0400, Brad Smith wrote:
> > > Here is an update to libsndfile 1.1.0beta2, plus two other fixes since the release.
> > >
> > > There are more security related bug fixes that have gone in between 1.0.31 and
> > > 1.1.0. I usually don't push beta releases but their release cycle is super slow
> > > due to lack of man power, but I think an update to this relase is worth it for
> > > the rollup of security fixes.
> > >
> > >
> > > ### Added
> > >
> > > * MPEG Encode/Decode Support.
> > >
> > > Uses libmpg123 for decode, liblame for encode. Encoding and decoding support
> > > is independent of each other and is split into separate files. MPEG support
> > > is generalized as subformats, `SF_FORMAT_MPEG_LAYER`(I,II,III) so that it
> > > might be used by other containers (`MPEG1WAVEFORMAT` for example), but also
> > > contains a major format `SF_FORMAT_MPEG` for 'mp3 files.'
> > >
> > > Encoding Status:
> > > * Layer III encoding
> > > * ID3v1 writing
> > > * ID3v2 writing
> > > * Lame/Xing Tag writing
> > > * Bitrate selection command
> > > * VBR or CBR
> > >
> > > Decoding Status:
> > > * Layers I/II/III decoding
> > > * ID3v1 reading
> > > * ID3v2 reading
> > > * Seeking
> > > * New fuzzer for OSS-Fuzz, thanks @DavidKorczynski.
> > > * This `CHANGELOG.md`. All notable changes to this project will be documented in
> > > this file. The old `NEWS` file has been renamed to `NEWS.OLD` and is no longer
> > > updated.
> > > * Add support for decoding MPEG III Audio in WAV files.
> > > * `SECURITY.md` file to give people instructions for reporting security
> > > vulnerabilities, thanks @zidingz.
> > > * Support for [Vcpkg manifest mode](https://vcpkg.readthedocs.io/en/latest/users/manifests/).
> > >
> > > If you have problems with manifest mode, disable it with `VCPKG_MANIFEST_MODE`
> > > switch.
> > >
> > > ### Changed
> > >
> > > * `SFC_SET_DITHER_ON_READ` and `SFC_SET_DITHER_ON_WRITE` enums comments in
> > > public header, thanks @SmiVan (issue #677).
> > > * `ENABLE_SNDFILE_WINDOWS_PROTOTYPES` define is deprecated and not needed
> > > anymore.
> > >
> > > Previously, in order for the [`sf_wchar_open`()](http://libsndfile.github.io/libsndfile/api.html#open)
> > > function to become available on the Windows platform, it was required to
> > > perform certain actions:
> > >
> > > ```c
> > > #include <windows.h>
> > > #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
> > > #including <sndfile.h>
> > > ```
> > >
> > > These steps are no longer required and the `sf_wchar_open`() function is
> > > always available on the Windows platform.
> > > * Use UTF-8 as internal path encoding on Windows platform.
> > >
> > > This is an internal change to unify and simplify the handling of file paths.
> > >
> > > On the Windows platform, the file path is always converted to UTF-8 and
> > > converted to UTF-16 only for calls to WinAPI functions.
> > >
> > > The behavior of the functions for opening files on other platforms does not
> > > change.
> > > * Switch to .xz over .bz2 for release tarballs.
> > > * Disable static builds using Autotools by default. If you want static
> > > libraries, pass --enable-static to ./configure
> > >
> > > ### Fixed
> > >
> > > * Typo in `docs/index.md`.
> > > * Typo in `programs/sndfile-convert.c`, thanks @fjl.
> > > * Memory leak in `caf_read_header`(), credit to OSS-Fuzz ([issue 30375](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=30375)).
> > > * Stack overflow in `guess_file_type`(), thanks @bobsayshilol, credit to
> > > OSS-Fuzz ([issue 29339](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=29339)).
> > > * Abort in fuzzer, thanks @bobsayshilol, credit to OSS-Fuzz
> > > ([issue 26257](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=26257)).
> > > * Infinite loop in `svx_read_header`(), thanks @bobsayshilol, credit to OSS-Fuzz
> > > ([issue 25442](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25442)).
> > > * GCC and Clang pedantic warnings, thanks @bobsayshilol.
> > > * Normalisation issue when scaling floating point data to `int` in
> > > `replace_read_f2i`(), thanks @bobsayshilol, (issue #702).
> > > * Missing samples when doing a partial read of Ogg file from index till the end
> > > of file, thanks @arthurt (issue #643).
> > > * sndfile-salvage: Handle files > 4 GB on Windows OS
> > > * Undefined shift in `dyn_get_32bit`(), credit to OSS-Fuzz
> > > ([issue 27366](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=27366)).
> > > * Integer overflow in `nms_adpcm_update`(), credit to OSS-Fuzz
> > > ([issue 25522](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25522)).
> > > * Integer overflow in `psf_log_printf`(), credit to OSS-Fuzz
> > > ([issue 28441](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28441)),
> > > ([issue 25624](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25624)).
> > > * ABI version incompatibility between Autotools and CMake build on Apple
> > > platforms.
> > >
> > > Now ABI must be compatible with Autotools builds. Note that this change
> > > requires CMake >= 3.17 for building dylib on Apple platforms.
> > >
> > > * Fix build with Autotools + MinGW toolchain on Windows platform.
> > >
> > > See https://github.com/msys2/MINGW-packages/issues/5803 for details.
> > >
> > > ### Security
> > >
> > > * Heap buffer overflow in `wavlike_ima_decode_block`(), thanks @bobsayshilol,
> > > credit to OSS-Fuzz ([issue 25530](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25530)).
> > > * Heap buffer overflow in `msadpcm_decode_block`(), thanks @bobsayshilol,
> > > credit to OSS-Fuzz ([issue 26803](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=26803)).
> > > * Heap buffer overflow in `psf_binheader_readf`(), thanks @bobsayshilol,
> > > credit to OSS-Fuzz ([issue 26026](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=26026)).
> > > * Index out of bounds in `psf_nms_adpcm_decode_block`(), credit to OSS-Fuzz
> > > ([issue 25561](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25561)).
> > > * Heap buffer overflow in `flac_buffer_copy`(), thanks @yuawn, @bobsayshilol.
> > > * Heap buffer overflow in `copyPredictorTo24`(), thanks @bobsayshilol,
> > > credit to OSS-Fuzz ([issue 27503](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=27503)).
> > > * Uninitialized variable in `psf_binheader_readf`(), thanks @shao-hua-li,
> > > credit to OSS-Fuzz ([issue 25364](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=25364)).
> >
> > And a final release was made a few days after I posted this with one small commit
> > for compiler warnings flag handling.
> >
>
> Index: Makefile
> ===================================================================
> RCS file: /home/cvs/ports/audio/libsndfile/Makefile,v
> retrieving revision 1.40
> diff -u -p -u -p -r1.40 Makefile
> --- Makefile 16 Mar 2022 19:21:14 -0000 1.40
> +++ Makefile 29 Mar 2022 03:39:26 -0000
> @@ -1,14 +1,11 @@
> COMMENT= library to handle various audio file formats
>
> -VER= 1.0.31
> -DISTNAME= libsndfile-${VER}
> -CATEGORIES= audio
> GH_ACCOUNT= libsndfile
> GH_PROJECT= libsndfile
> -GH_TAGNAME= ${VER}
> -REVISION= 1
> +GH_TAGNAME= 1.1.0
> +CATEGORIES= audio
>
> -HOMEPAGE= https://github.com/libsndfile/libsndfile/
> +HOMEPAGE= https://libsndfile.github.io/libsndfile/
>
> MAINTAINER= Jan Stary <hans@stare.cz>
>
> @@ -17,7 +14,7 @@ SHARED_LIBS += sndfile 7.0
> # LGPLv2.1
> PERMIT_PACKAGE= Yes
>
> -WANTLIB= c m sndio FLAC ogg opus vorbis vorbisenc
> +WANTLIB= FLAC c m mp3lame mpg123 ogg opus sndio vorbis vorbisenc
>
> MODULES= devel/cmake \
> lang/python
> @@ -29,8 +26,12 @@ CONFIGURE_ARGS= -DBUILD_SHARED_LIBS:BOOL
> -DCMAKE_DISABLE_FIND_PACKAGE_SQLite3:BOOL=True
>
> LIB_DEPENDS= audio/flac \
> + audio/lame \
> audio/libogg \
> audio/libvorbis \
> + audio/mpg123 \
> audio/opus
> +
> +NO_TEST= Yes
>
> .include <bsd.port.mk>
> Index: distinfo
> ===================================================================
> RCS file: /home/cvs/ports/audio/libsndfile/distinfo,v
> retrieving revision 1.19
> diff -u -p -u -p -r1.19 distinfo
> --- distinfo 24 Apr 2021 06:17:13 -0000 1.19
> +++ distinfo 29 Mar 2022 03:39:51 -0000
> @@ -1,2 +1,2 @@
> -SHA256 (libsndfile-1.0.31.tar.gz) = jN7grLBrsKPBpspSRXVkPfix86VaCJO03Z+CnQgmN4U=
> -SIZE (libsndfile-1.0.31.tar.gz) = 662584
> +SHA256 (libsndfile-1.1.0.tar.gz) = ZCqHa9YbY/k0ZijbpfigNWo611DH9vQgGdJs5gumoVs=
> +SIZE (libsndfile-1.1.0.tar.gz) = 684409
> Index: patches/patch-src_caf_c
> ===================================================================
> RCS file: patches/patch-src_caf_c
> diff -N patches/patch-src_caf_c
> --- patches/patch-src_caf_c 11 Mar 2022 18:20:16 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,17 +0,0 @@
> -Fix memory leak in caf_read_header().
> -
> -Index: src/caf.c
> ---- src/caf.c.orig
> -+++ src/caf.c
> -@@ -416,6 +416,11 @@ caf_read_header (SF_PRIVATE *psf)
> - return SFE_CAF_BAD_PEAK ;
> - } ;
> -
> -+ if (psf->peak_info)
> -+ { psf_log_printf (psf, "*** Found existing peak info, using last one.\n") ;
> -+ free (psf->peak_info) ;
> -+ psf->peak_info = NULL ;
> -+ } ;
> - if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
> - return SFE_MALLOC_FAILED ;
> -
> Index: patches/patch-src_flac_c
> ===================================================================
> RCS file: patches/patch-src_flac_c
> diff -N patches/patch-src_flac_c
> --- patches/patch-src_flac_c 16 Mar 2022 19:09:59 -0000 1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,19 +0,0 @@
> -Fix heap overflow:
> -https://github.com/libsndfile/libsndfile/commit/ced91d7b971be6173b604154c39279ce90ad87cc
> -https://github.com/libsndfile/libsndfile/issues/731
> -
> -Index: src/flac.c
> ---- src/flac.c.orig
> -+++ src/flac.c
> -@@ -948,7 +948,11 @@ flac_read_loop (SF_PRIVATE *psf, unsigned len)
> - /* Decode some more. */
> - while (pflac->pos < pflac->len)
> - { if (FLAC__stream_decoder_process_single (pflac->fsd) == 0)
> -+ { psf_log_printf (psf, "FLAC__stream_decoder_process_single returned false\n") ;
> -+ /* Current frame is busted, so NULL the pointer. */
> -+ pflac->frame = NULL ;
> - break ;
> -+ } ;
> - state = FLAC__stream_decoder_get_state (pflac->fsd) ;
> - if (state >= FLAC__STREAM_DECODER_END_OF_STREAM)
> - { psf_log_printf (psf, "FLAC__stream_decoder_get_state returned %s\n", FLAC__StreamDecoderStateString [state]) ;
> Index: patches/patch-src_ima_adpcm_c
> ===================================================================
> RCS file: patches/patch-src_ima_adpcm_c
> diff -N patches/patch-src_ima_adpcm_c
> --- patches/patch-src_ima_adpcm_c 11 Mar 2022 18:20:16 -0000 1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,19 +0,0 @@
> -Make sure that there's enough space to store decoded nibbles in when reading IMA ADPCM data.
> -
> -Index: src/ima_adpcm.c
> ---- src/ima_adpcm.c.orig
> -+++ src/ima_adpcm.c
> -@@ -182,7 +182,12 @@ ima_reader_init (SF_PRIVATE *psf, int blockalign, int
> - if (psf->file.mode != SFM_READ)
> - return SFE_BAD_MODE_RW ;
> -
> -- pimasize = sizeof (IMA_ADPCM_PRIVATE) + blockalign * psf->sf.channels + 3 * psf->sf.channels * samplesperblock ;
> -+ /*
> -+ ** Allocate enough space for 1 more than a multiple of 8 samples
> -+ ** to avoid having to branch when pulling apart the nibbles.
> -+ */
> -+ count = ((samplesperblock - 2) | 7) + 2 ;
> -+ pimasize = sizeof (IMA_ADPCM_PRIVATE) + psf->sf.channels * (blockalign + samplesperblock + sizeof(short) * count) ;
> -
> - if (! (pima = calloc (1, pimasize)))
> - return SFE_MALLOC_FAILED ;
> Index: patches/patch-src_ms_adpcm_c
> ===================================================================
> RCS file: patches/patch-src_ms_adpcm_c
> diff -N patches/patch-src_ms_adpcm_c
> --- patches/patch-src_ms_adpcm_c 16 Mar 2022 19:09:59 -0000 1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,24 +0,0 @@
> -CVE-2021-3246:
> -https://security-tracker.debian.org/tracker/CVE-2021-3246
> -https://github.com/libsndfile/libsndfile/commit/deb669ee8be55a94565f6f8a6b60890c2e7c6f32
> -
> -Index: src/ms_adpcm.c
> ---- src/ms_adpcm.c.orig
> -+++ src/ms_adpcm.c
> -@@ -128,8 +128,14 @@ wavlike_msadpcm_init (SF_PRIVATE *psf, int blockalign,
> - if (psf->file.mode == SFM_WRITE)
> - samplesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
> -
> -- if (blockalign < 7 * psf->sf.channels)
> -- { psf_log_printf (psf, "*** Error blockalign (%d) should be > %d.\n", blockalign, 7 * psf->sf.channels) ;
> -+ /* There's 7 samples per channel in the preamble of each block */
> -+ if (samplesperblock < 7 * psf->sf.channels)
> -+ { psf_log_printf (psf, "*** Error samplesperblock (%d) should be >= %d.\n", samplesperblock, 7 * psf->sf.channels) ;
> -+ return SFE_INTERNAL ;
> -+ } ;
> -+
> -+ if (2 * blockalign < samplesperblock * psf->sf.channels)
> -+ { psf_log_printf (psf, "*** Error blockalign (%d) should be >= %d.\n", blockalign, samplesperblock * psf->sf.channels / 2) ;
> - return SFE_INTERNAL ;
> - } ;
> -
> Index: patches/patch-src_sndfile_c
> ===================================================================
> RCS file: patches/patch-src_sndfile_c
> diff -N patches/patch-src_sndfile_c
> --- patches/patch-src_sndfile_c 11 Mar 2022 18:20:16 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,22 +0,0 @@
> -Jump back to the start of guess_file_type() rather than recursing into it.
> -
> -Index: src/sndfile.c
> ---- src/sndfile.c.orig
> -+++ src/sndfile.c
> -@@ -2680,6 +2680,7 @@ static int
> - guess_file_type (SF_PRIVATE *psf)
> - { uint32_t buffer [3], format ;
> -
> -+retry:
> - if (psf_binheader_readf (psf, "b", &buffer, SIGNED_SIZEOF (buffer)) != SIGNED_SIZEOF (buffer))
> - { psf->error = SFE_BAD_FILE_READ ;
> - return 0 ;
> -@@ -2780,7 +2781,7 @@ guess_file_type (SF_PRIVATE *psf)
> - || buffer [0] == MAKE_MARKER ('I', 'D', '3', 4))
> - { psf_log_printf (psf, "Found 'ID3' marker.\n") ;
> - if (id3_skip (psf))
> -- return guess_file_type (psf) ;
> -+ goto retry ;
> - return 0 ;
> - } ;
> -
> Index: patches/patch-src_svx_c
> ===================================================================
> RCS file: patches/patch-src_svx_c
> diff -N patches/patch-src_svx_c
> --- patches/patch-src_svx_c 11 Mar 2022 18:20:16 -0000 1.2
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,15 +0,0 @@
> -Jump forwards to the next 4 byte aligned offset rather than always jumping backwards by 3 bytes.
> -
> -Index: src/svx.c
> ---- src/svx.c.orig
> -+++ src/svx.c
> -@@ -307,7 +307,8 @@ svx_read_header (SF_PRIVATE *psf)
> - if ((chunk_size = psf_ftell (psf)) & 0x03)
> - { psf_log_printf (psf, " Unknown chunk marker at position %d. Resynching.\n", chunk_size - 4) ;
> -
> -- psf_binheader_readf (psf, "j", -3) ;
> -+ chunk_size = chunk_size & 3 ;
> -+ psf_binheader_readf (psf, "j", 4 - chunk_size) ;
> - break ;
> - } ;
> - psf_log_printf (psf, "*** Unknown chunk marker (%X) at position %D. Exiting parser.\n", marker, psf_ftell (psf) - 8) ;
> Index: patches/patch-src_wavlike_c
> ===================================================================
> RCS file: patches/patch-src_wavlike_c
> diff -N patches/patch-src_wavlike_c
> --- patches/patch-src_wavlike_c 16 Mar 2022 19:09:59 -0000 1.3
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,20 +0,0 @@
> -CVE-2021-3246:
> -https://security-tracker.debian.org/tracker/CVE-2021-3246
> -https://github.com/libsndfile/libsndfile/commit/a9815b3f228df00086e0a40bcc43162fc19896a1
> -
> -Index: src/wavlike.c
> ---- src/wavlike.c.orig
> -+++ src/wavlike.c
> -@@ -830,7 +830,11 @@ wavlike_read_cart_chunk (SF_PRIVATE *psf, uint32_t chu
> - return 0 ;
> - } ;
> -
> -- if (chunksize >= sizeof (SF_CART_INFO_16K))
> -+ /*
> -+ ** SF_CART_INFO_16K has an extra field 'tag_text_size' that isn't part
> -+ ** of the chunk, so don't include it in the size check.
> -+ */
> -+ if (chunksize >= sizeof (SF_CART_INFO_16K) - 4)
> - { psf_log_printf (psf, "cart : %u too big to be handled\n", chunksize) ;
> - psf_binheader_readf (psf, "j", chunksize) ;
> - return 0 ;
>

No comments:

Post a Comment