Commit Graph

4306 Commits

Author SHA1 Message Date
Martijn van Beurden 43bc8101ce Switch default bitreader/bitwriter word size to 64-bit 2023-03-27 22:10:00 +02:00
Martijn van Beurden 00cb41ee03 Add use of x86 BMI2 to bitreader_read_rice_signed_block 2023-03-27 22:10:00 +02:00
Martijn van Beurden 75d596a234
Only calculate mid-side signal when necessary (#567)
The calculation of the mid-side signal components is moved, so this
is only performed when necessary. This gives a speed up of about
2% for preset 1 on a representative sample
2023-03-27 11:58:49 +02:00
Martijn van Beurden 68f605bd28
Fix mistakes in _compute_best_predictor_limit_residual_intrin_* (#572)
I made a few mistakes in these functions, adding instead of or-ing
and xor-ing instead of or-ing. The issue linked below seems to
relate to something completely different, but it is in fact a
result of triggering these mistakes further down the line.

Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57071
2023-03-20 19:21:23 +01:00
Martijn van Beurden 6633d2f9bf Set stdin/stdout to binary on Windows for binary input/output
Also fix tests on Windows
2023-03-19 22:37:40 +01:00
Martijn van Beurden c10b059588 Limit hexdump characters to what is allowed in UTF-8
CI tests failed on MacOS printf using a non-UTF8 locale, printing
characters for bytes values above 127. To have a consistent
interface, only print characters with a byte value lower than
128.
2023-03-19 22:37:40 +01:00
Martijn van Beurden 6fa51a7acc Fix error of metaflac --append testing, add troubleshooting 2023-03-19 22:37:40 +01:00
Martijn van Beurden 436a3577dc Add tests for metaflac --append 2023-03-19 22:37:40 +01:00
Martijn van Beurden 0b3d86ebc3 Check is_last flags on writing a chain 2023-03-19 22:37:40 +01:00
Martijn van Beurden 21bf406fda Add checks so metaflac --append doesn't create invalid files
Checks are added that no streaminfo or seektable blocks can be
added, and no vorbis comment block is one already exists
2023-03-19 22:37:40 +01:00
Martijn van Beurden 8e563a697d Add --append option to metaflac 2023-03-19 22:37:40 +01:00
Martijn van Beurden b11677e052 Add API function FLAC__metadata_object_set_raw
Add an API function to directly input binary FLAC data to get a
FLAC__StreamMetadata struct. The use mirrors
FLAC__metadata_object_get_raw
2023-03-19 22:37:40 +01:00
Martijn van Beurden 904d027518 Add test for metaflac --data-format=binary-headerless 2023-03-19 22:37:40 +01:00
Martijn van Beurden b3b9176330 Add data-format option to metaflac, enabling binary output 2023-03-19 22:37:40 +01:00
Martijn van Beurden b54eabdf0d Add API function FLAC__metadata_object_get_raw
Add an API function to directly output binary FLAC data corresponding
to a certain FLAC__StreamMetadata struct
2023-03-19 22:37:40 +01:00
Martijn van Beurden eed37c39fa Enable fuzzer_tool_metaflac to fuzz with stdin 2023-03-19 18:31:16 +01:00
Martijn van Beurden 5b145aff12 Convert asserts into explicit checks
An assert checking whether the bit depth of a FLAC file was valid
was triggered by fuzzing. This assert is converted to a explicit
check.

Similarly, an assert was triggered with a file of sample rate 0
when trying to add seekpoints spaced with seconds.
2023-03-19 18:31:16 +01:00
Martijn van Beurden b5c763d908 Fix double free in iconvert code 2023-03-19 18:31:16 +01:00
Martijn van Beurden eba4b6f63b Check whether exceeding max seekpoints on growing seektable 2023-03-19 18:31:16 +01:00
Martijn van Beurden ae1db7147a Fix problems reading vorbis comment data being ignored 2023-03-19 18:31:16 +01:00
Martijn van Beurden ac39a0078d Improve fuzzer_tool_metaflac 2023-03-19 18:31:16 +01:00
Martijn van Beurden 2568bf69aa Fix metaflac memory leak 2023-03-19 18:31:16 +01:00
Martijn van Beurden 5f39e88a88 Fix strlen being used on uninitialized data 2023-03-19 18:31:16 +01:00
Martijn van Beurden cad22e0e3a Prevent strcmp being used on invalid data 2023-03-19 18:31:16 +01:00
Martijn van Beurden 67d2e1ee4c Add fuzzer for metaflac command-line tool 2023-03-19 18:31:16 +01:00
Martijn van Beurden e683286bb4 Add use of stdin to fuzzer_tool_flac, and redirect stdout 2023-03-18 22:55:35 +01:00
Martijn van Beurden 0e1535ccce Check for invalid blocksize (65536) 2023-03-18 22:55:35 +01:00
Martijn van Beurden f4220895bb Fix null dereference
Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57032
2023-03-18 22:55:35 +01:00
Martijn van Beurden 9593b949c2 Try to unblock fuzzer_tool_flac by resetting global variables 2023-03-18 22:55:35 +01:00
Harish Mahendrakar 9c83e6e434 Add missing *local_fixed_compute_best_predictor_wide member 2023-03-11 15:47:17 +01:00
Martijn van Beurden 383512d551 Try to make tool_flac fuzzer not only fuzz with arguments 2023-03-09 14:31:49 +01:00
Martijn van Beurden 6db29d1050 Check for got_stream_info instead of samplerate being 0
Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56427
2023-03-09 14:31:49 +01:00
Martijn van Beurden 4d6d8b342f
Speed up set_partitioned_rice_ 2023-03-08 12:26:44 +01:00
Martijn van Beurden e2faeb80ec Check for 0 samples before outputting gnuplot data
Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56339
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56374
2023-03-07 06:49:45 +01:00
Martijn van Beurden 07471c89e7 Swap small and large loop for further speed up in format_input 2023-03-06 11:15:02 +01:00
Martijn van Beurden 724a8aa32e Further speed up format_input for 24-bit PCM by about 25% 2023-03-06 11:15:02 +01:00
Martijn van Beurden 6884355d87 Speed up format_input for 24-bit PCM by 50% 2023-03-06 11:15:02 +01:00
Martijn van Beurden 2b66d94b34 Speed up format_input for 32-bit PCM 2023-03-06 11:15:02 +01:00
Martijn van Beurden 2b84e8593d Write SANE extended zero to remove assert
Simply ignoring this assert (as production code does) results in
an endless loop.

Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56323
2023-03-03 16:35:31 +01:00
Martijn van Beurden fe19b113a9 Fix use of undefined value in flac
Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56327
2023-03-03 16:35:31 +01:00
Martijn van Beurden 3857234f2b Fix memory leak in flac on foreign metadata object
Credit: Oss-Fuzz
Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56305
2023-03-03 16:35:31 +01:00
Martijn van Beurden 4d21da1183 Add FLAC__fixed_compute_best_predictor_limit_residual_intrin_avx2
This function seems to execute twice as fast as
FLAC__fixed_compute_best_predictor_limit_residual_intrin_sse42 and
5x as fast as plain C
2023-02-27 17:22:17 +01:00
Martijn van Beurden d24b45515e Add fixed_compute_best_predictor_limit_residual_intrin_sse42
I couldn't find a fixed_compute_best_predictor_wide_intrin_sse42
that was faster than plain C, but I was able to find a working
variant for this function. Execution time is halved.
2023-02-27 17:22:17 +01:00
Martijn van Beurden f6fb70442e Add fixed_compute_best_predictor_wide_intrin_avx2
This function executes twice as fast as plain C, test with Intel
Xeon E-2224G
2023-02-27 17:22:17 +01:00
Martijn van Beurden 3173fc064f Remove fixed_compute_best_predictor_wide_intrin
Profiling revealed that this intrinsic is about 50% slower than
plain C on my Intel Xeon E-2224G.
2023-02-27 17:22:17 +01:00
Martijn van Beurden 2db6c1d138 Fix mistake in use of bitwriter_grow_ 2023-02-26 15:10:10 +01:00
Martijn van Beurden 9f3894f0d5 Change FLAC__bitwriter_write_rice_signed_block for 64-bit words 2023-02-26 15:10:10 +01:00
Martijn van Beurden b698ed45f3 Rewrite FLAC__bitwriter_write_rice_signed_block for 32 bit words
Using a very different approach: instead of trying to write a full
32-bit bitwriter word, a 64-bit buffer is filled, of which the
first 32 bits are copied to the bitwriter as soon as they are
filled. This way, only very large symbols have to be splitted.

This approach is considerably simpler, and the fast path is taken
much more often.
2023-02-26 15:10:10 +01:00
Zhipeng Xue a336ea5264
Fix potential resource leak 2023-02-24 21:58:45 +01:00
Martijn van Beurden 9382c5375b Add checks on re-encoding FLAC
While decoding from FLAC checks for changes no. of channels, bps
and sample rate, re-encoding doesn't. A fuzzer found use of
uninitialized memory because of this. A few checks are added,
although the user isn't warned on a samplerate change.
2023-02-23 06:59:11 +01:00