Commit Graph

4056 Commits

Author SHA1 Message Date
Martijn van Beurden
7e785eb9a8 Fix seeking bug
Commit 159cd6c introduced a bug that only triggered upon seeking
from the start of a headerless FLAC file to the first frame (so
really not a seek at all). Furthermore that commit did nothing
else in any other circumstance. This commit fixes that, by both
fixing the problem and the behaviour the commit mentioned earlier
meant to introduce.

Co-authored-by: Robert Kausch <robert.kausch@freac.org>
2022-04-27 10:29:34 +02:00
Martijn van Beurden
9c495ae3ac Enable flac to skip extra STREAMINFO and check number of samples
This commit fixed problems with two files mentioned here:
https://hydrogenaud.io/index.php?topic=121478.msg1004022#msg1004022

The first file was truncated and had no MD5. flac didn't warn
about the number of samples not being correct. The second file
had corrupted metadata in which flac detected two STREAMINFO
blocks, triggering quite odd behaviour.

This commit adds checks for the number of samples and skips
a STREAMINFO block if it has already received one
2022-04-27 07:26:04 +02:00
Martijn van Beurden
d4131c0aff Remove 'news' from html doc 2022-04-26 22:09:05 +02:00
Martijn van Beurden
a21bdc4a9e Documentation fixes: preset description and subset blocksizes
As described in github issue #236, the description of compression
presets in flac.sgml wasn't updated. Also, the description of which
blocksizes are considered subset has been lagging behind in the
manpages as well as the build-in help of FLAC for years, as this
was changed back in 2007. This commit fixes those issues
2022-04-26 22:09:05 +02:00
Martijn van Beurden
f59cb6f7b4 Update links to Xiph git in documentation 2022-04-26 22:09:05 +02:00
Martijn van Beurden
f6b78e69e0 [CMake] Honor WITH_AVX
Fixes https://github.com/xiph/flac/issues/286
2022-04-26 20:52:20 +02:00
Martijn van Beurden
c157be0f77 Add a license to fuzzing code
The flac fuzzers were taken from
https://github.com/guidovranken/flac-fuzzers and
https://github.com/guidovranken/fuzzing-headers

I couldn't find a mention of a license anywhere, so I contacted
the author: https://github.com/guidovranken/flac-fuzzers/issues/2

Following this, a licence statement is added to all files taken
from these repositories
2022-04-25 20:28:17 +02:00
Martijn van Beurden
8c46644a8d [CMake] Add check for PPC64, POWER8/9 and vec_doubleh
Add checks for POWER8/9 intrinsics similar to those in autotools
to cmake
2022-04-25 20:13:36 +02:00
Martijn van Beurden
d15bcf80a0 Add check for certain POWER8/9 intrinsic in altivec.h to configure 2022-04-25 20:13:36 +02:00
Martijn van Beurden
a4156cd78b Modify Travis to only use partner queues
Currently github actions only runs CI on x86. Travis has 'partner
queues' which do not use credits. By changing .travis.yml to only
use these, forks can use Travis to test on arm64 and ppc64le. I
intend to use this to run travis every now and then on my own
clone of xiph/flac
2022-04-25 20:13:36 +02:00
Martijn van Beurden
f304a4cf86 Remove partition order limit on last block
The partition order was forced to 0 on the last block of a stream.
This limitation is not necessary, as further down in the code more
generic limits are already in place. This improved compression on
the last block, so especially very short files benefit
2022-04-24 22:27:02 +02:00
Cameron Cawley
32d51aade6 Only define _XOPEN_SOURCE and __EXTENSIONS__ when necessary 2022-04-22 17:19:49 +02:00
Cameron Cawley
ce18b591a0 Always use utimbuf when building for Windows 2022-04-22 17:19:49 +02:00
Martijn van Beurden
11b72938c1 Fix format_mistake printf
If on encoding a different format header is detected than is guessed
from file extension, format_mistake in invoked. On merging wave64
support (commit d7f5344), updating the printable names in
format_mistake was missed
2022-04-22 16:59:04 +02:00
Martijn van Beurden
b288acb109 No not stop decoding FLAC file
As discussed in https://github.com/xiph/flac/issues/243, this is
probably the root cause of CVE-2021-0561
2022-04-22 15:30:40 +02:00
pkubaj
36b5b63b36 Fix hwcaps type for FreeBSD/powerpc*
According to elf_aux_info() manpage, AT_HWCAP2 is of u_long type.
Feature detection works anyway in this case, but u_long is more correct.
While here, also remove FreeBSD 11 support, it's EOL.
2022-04-22 15:27:54 +02:00
NotTsunami
b171e767e2 Add missing langinfo check for CMake 2022-04-21 19:35:58 +02:00
Martijn van Beurden
f579b163fe
Add git commit tag, hash and date to vendor string when available
In some circles (Hydrogenaud.io for example) people share binaries
compiled from git, i.e. inbetween official releases. Files created
with these binaries cannot be discerned from others. To improve
troubleshooting, compiles from a git repository are marked with
the commit hash and date when configured with autotools or CMake
2022-04-20 21:47:07 +02:00
Martijn van Beurden
1ca7b38f3c Add FLAC__STREAM_DECODER_ERROR_STATUS_BAD_METADATA 2022-04-20 12:06:42 +02:00
Martijn van Beurden
0077d3b697 Add checks in parsing metadata blocks
In parsing certain types of metadata blocks, it was not checked
whether certain length fields were at all possible. A small file
of 64 byte was enough to let the decoder allocate 4GiB of memory
by simply stating a field was 4GiB in length, while metadata
blocks in FLAC cannot be larger than 16MiB.

This commit adds a mechanism to the bitreader to set a length
limit upon reading. This limit is checked at each read, at each
memory allocation and after reading the block. In case anything
is deemed wrong, parsing metadata is aborted, as 'resyncing' is
only possible on audio frames, not on metadata blocks.

Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=37865
2022-04-20 12:06:42 +02:00
Martijn van Beurden
0f98b940f8 Update fuzzers
This changes the names of the two fuzzers so they align with
current oss-fuzz usage (to provide continuity in test data and
corpora) and adds a dictionary to the decoder fuzzer. It also
removes some unnecessary configuration, as it clashed with oss-fuzz
defaults
2022-04-20 11:10:08 +02:00
Martijn van Beurden
b48ed95fcb Deduplicate VSX and SSE2 autocorelation calculation code 2022-04-19 20:38:37 +02:00
Martijn van Beurden
ee18d1b892 Switch to autoc[] as double
This changes the calculation of autocorrelation from single precision
float to double precision. With this, compression improves on average
by about 0.5% with compression level 4, with some tracks (espcially
material with high samplerates) seeing improvements of 10% or more.

This commit removes SSE intrinsics and MMX assembler routins, adds
SSE2 and changes VSX autoc[] routines and changes the regular C
code.
2022-04-19 20:38:37 +02:00
Martijn van Beurden
b19ed90a5b
Remove api doc note untrue since commit c9c0d13
This has been untrue for almost 20 years now
2022-04-19 19:05:24 +02:00
Martijn van Beurden
7385dac383
Fix overflow of streaminfo total samples (github issue 237)
When writing a FLAC file with over 2^36 samples, the total samples
entry in streaminfo will overflow and wrap around. Setting it to 0
(which means unknown number of samples) makes sure the decoder
doesn't rely on this number

Co-authored-by: Ralph Giles <giles@thaumas.net>
2022-04-19 17:45:22 +02:00
NotTsunami
7406eabe17 Remove unused macros
Cleanup of ecede0bc72
2022-04-19 10:57:46 +02:00
Till Schäfer
ff818486dc Avoid creating a new variable in md5 gcc workaround
https://sourceforge.net/p/flac/bugs/478/
2022-04-19 10:55:23 +02:00
Martijn van Beurden
4b7e79f974 Fix stack protector detection for C++ 2022-04-19 10:55:23 +02:00
Martijn van Beurden
cde4b8c783 Add more overflow checks for residual_bits calculation
commit 585e3b added an overflow check in the residual bits
calculation, but actually hitting this causes problems further
down the line. This fixes the problem described in
https://hydrogenaud.io/index.php?topic=121349.msg1001227;topicseen#new

Also, UINT_MAX is changed to UINT32_MAX as uint32_t is used, not unsigned
2022-04-17 21:22:02 +02:00
Martijn van Beurden
21d0640ea9 Limit maximum size of bitwriter buffer
In the past, various bugs have triggered libFLAC to write enormous
coded residuals. While these bugs have been fixed, this check is
added to limit the impact of possible remaining or future bugs

When a bitwriter is grown past the maximum sane size of a frame
(8 channels of 65535 samples with 24 + 4 bits per sample) this
indicates that such a bug was triggered. Instead of a possible
crash or creating unreadable files, bitwriter_grow_ fails as if
it could not allocate more memory.
2022-04-17 19:17:02 +02:00
Martijn van Beurden
2e50ea341d Remove special treatment of partition_order == 0
in set_partitioned_rice, there was a special treatment in case
partition_order == 0. In this case, a rice parameter was passed
as an argument. However, in case of an LPC block, this rice
parameter was calculated from the LPC error, which is based on the
samples after windowing. Quite often, this resulted in a subframe
with two partition with the same rice parameter. Also, in case of
partial_tukey and punchout_tukey windows, the suggested rice
parameter could be quite sub-optimal.

This patch removes the special treatment of partition_order == 0
and the passing of a rice_parameter as an argument
2022-04-17 19:17:02 +02:00
Martijn van Beurden
c729747d42 Fix size of first frame when using analyze function
The size of the first frame was displaying including a PADDING
block, as the decoder position wasn't updated after processing
one such block. The location in the code where the decoder
position is updated has been moved, so a PADDING block does not
get included into the size of the first frame anymore
2022-04-17 16:41:39 +02:00
Martijn van Beurden
14eb65de34 Fix configuration of stack smash protection/fortify source on MinGW
Without this commit, building fails on MinGW because
-D_FORTIFY_SOURCE=2 needs runtime support which MinGW does not
provide. Building was possible with make LDFLAGS='-lssp'

This commit checks whether a symbol used by _D_FORTIFY_SOURCE=2 and
the stack smashing protector are available, and if so, enables these.
Resulting DLLs depend on the libssp DLL.
2022-04-15 09:36:15 +02:00
Martijn van Beurden
7dd7f94822 Fix building both static and shared libs on MinGW with autotools
When building both static and shared libs on MinGW with autotools,
the build broke down without any error message. This commit makes
such a build work
2022-04-15 09:36:15 +02:00
Martijn van Beurden
ecede0bc72 Remove AC_C_VARARRAYS from configure.ac
With autoconf 2.70, the behaviour of AC_C_VARARRAYS has changed,
causing a lot of warnings and as a result a cluttered make output.

Doing some research as to where this comes from, I found an strange
piece of code that seems to rely on a misunderstanding as to VLA's
in C++. As I found, the C++ standard does not have VLA's. The
configure.ac code and some code in libFLAC++ seems to think it does.
This now causes strange behaviour.

This commit removes the code relying on this behaviour and removing
all VLA related autoconf macro's from configure.ac
2022-04-15 09:36:15 +02:00
Martijn van Beurden
13149acddd Remove more obsolete autoconf macro's
Autoconf 2.71 warns about obsolete macro's on running ./autogen.sh.

AC_PROG_CC_STDC is replaced by AC_PROG_CC as recommended by autoupdate

AC_HEADER_STDC has been removed. Autoupdate recommended the following:
> The preprocessor macro `STDC_HEADERS' is obsolete. Except in unusual
> embedded environments, you can safely include all ISO C90 headers
> unconditionally.
2022-04-15 09:36:15 +02:00
Martijn van Beurden
d94a43d5c3 Update configure.ac and m4 files with autoupdate 2.60
Starting with autoconf 2.70, obsolescence warnings are output by
default. To keep the script as compatible as possible, I build
autoconf 2.60 and ran the autoupdate that came with it on
configure.ac and all m4 files.
2022-04-15 09:36:15 +02:00
Rosen Penev
144075a114 add clang-format file
This was generated with whatstyle:

whatstyle.py $(find -name "*.h")

with some minor fixups.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
2022-04-14 20:42:01 +02:00
Con Kolivas
24629435bb Add support in the encoder for up to 20 bit sample rates
Now that many DACs support up to 768kHz, add support for these
sample rates to the encoder. Files produced with these sample rates
are already decodable by the reference decoder. Update documentation
and tests accordingly.
2022-04-13 20:32:08 +02:00
Martijn van Beurden
f7e77f627a Build as Release to speed up testing and mute debug output 2022-04-13 17:37:50 +02:00
Martijn van Beurden
31bcbb8662 [CI] Run full test suite on Windows 2022-04-13 17:37:50 +02:00
Martijn van Beurden
ce31a1d51f [CMake] Enable testing through busybox
With this commit, it is possible to run the full test suite on
Windows machines when busybox-w32 is installed. This program is
available through chocolatey with 'choco install busybox'

CMake tests for availability of busybox and use if available. As
chocolatey is the preferred method of fetching software for
Github actions, this commit paves the way for running the full
test suite on Windows for CI
2022-04-13 17:37:50 +02:00
Martijn van Beurden
0ec47a87b4 [CMake] Remove /MT from MSVC flags, causes crashes with shared libs 2022-04-13 17:37:50 +02:00
Martijn van Beurden
db72703f86 [CMake] Set binary and library output dir to objs on Windows
Without this patch, CMake places output binaries and libraries in
the respective source directories, like the autotools build system.
The Visual Studio build system places objects in the objs directory

Because CTest didn't run properly when building shared libs, this
commit changes the CMake behaviour on (NOT UNIX) to that similar
to Visual Studio. That way, DLLs and EXEs are placed in the same
directory and running CTest with the correct DLLs being loaded
is trivial.
2022-04-13 17:37:50 +02:00
Martijn van Beurden
4256c12eac [CMake] Specifically prefer linking with static libssp
As to have a libFLAC.dll with no additional dependencies, linking
with libssp.a is preferred over linking with libssp.dll.a
2022-04-13 17:37:50 +02:00
Martijn van Beurden
6e3089b9bc [CMake] Add BUILD_SHARED_LIBS as options 2022-04-13 17:37:50 +02:00
Martijn van Beurden
805b7dba83 [CMake] Build with -lssp on MinGW 2022-04-13 17:37:50 +02:00
NotTsunami
617efda90d CMake: Make FORTIFY_SOURCE optional
* Also add in checking for libssp for MinGW
2022-04-13 17:37:50 +02:00
Martijn van Beurden
f5efd956d9 [CMake] Create prettier MSVC solution files 2022-04-13 17:37:50 +02:00
Martijn van Beurden
2013738622 [CMake] Add options for better MS Visual Studio building 2022-04-13 17:37:50 +02:00