summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* gitlab ci: Remove Makefile.lite jobRalph Giles2022-05-301-17/+0
| | | | | This build system has been removed, so don't try to test it on gitlab instances.
* Github actions: add make distcheck jobRalph Giles2022-05-301-0/+34
| | | | | | | | | Add a github action to build and verify the traditional distribution source package with GNU Autotools, also known as `make distcheck`. This helps catch errors propagating required file list changes. Co-authored-by: Martijn van Beurden <mvanb1@gmail.com>
* Export flac properly when use with add_subdirectory (#285)martinRenou2022-05-302-4/+16
| | | | | This allows for flac to be used in a larger CMake project with add_subdirectory. It also allows for Ogg to be build elsewhere in the larger project.
* Fix fuzzer_decoder timeoutsMartijn van Beurden2022-05-291-3/+8
| | | | | | | | | | | | | | fuzzer_decoder was running into timeouts because it triggered the gap-filling for broken frames with 5*192000 samples and a blocksize of 1, causing the write callback to be called 960000 times. Doing this several times in one file caused a single fuzz run to take > 60 seconds This commit limits the minimum blocksize to 16 samples, and the maximum number of frames emitted to 50 Credit: Oss-Fuzz Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47193
* Close file when stream_encoder init failsMartijn van Beurden2022-05-281-0/+5
|
* Only locally disable signed integer sanitizing on decoder fuzzersMartijn van Beurden2022-05-283-3/+4
| | | | See https://github.com/google/oss-fuzz/pull/7687
* Improve compute_residual_from_qlp_coefficients datapath selectionMartijn van Beurden2022-05-284-2/+32
| | | | | This bases the selection of the datapath on the actual predictor coefficients instead of on the predictor coefficient precision
* Remove Makefile.lite build systemMartijn van Beurden2022-05-2767-2114/+17
|
* Small make distcheck fixesMartijn van Beurden2022-05-275-8/+11
|
* Remove all Visual Studio specific build filesMartijn van Beurden2022-05-27102-12757/+18
|
* fuzzer_encoder_v2, fix 32-bit input and seektableMartijn van Beurden2022-05-261-2/+2
|
* Remove all assembler and intrinsics from decoderMartijn van Beurden2022-05-264-1270/+2
| | | | | | | This commit drops all use of assembler and intrinsics from the libFLAC decoder. This is because they are only for 32-bit x86, hard to debug, maintain and fuzz properly, and because the decoder has much greater security risks than the encoder.
* Add extra check to decoding cpp example like in 93846eeMartijn van Beurden2022-05-231-0/+4
| | | | | | This fixes https://github.com/xiph/flac/issues/162 See also https://sourceforge.net/p/flac/bugs/418/
* Renable escape coding for fuzzingMartijn van Beurden2022-05-221-2/+4
| | | | | | | | Escape coding has been deprecated since FLAC 1.0.4 (24-Sep-2002), but it is needed for full spec coverage, (as this is a reference implementation after all) so this should be reenabled at some point. For now only enable while fuzzing, so we can get some bugs out first.
* Fix compression of loose mid-side for certain kinds of musicMartijn van Beurden2022-05-211-1/+5
| | | | | | | | | The loose mid-side option only fully evaluates stereo decorrelation once every few frames. However, in case of finding left-side or right-side to be the best option, subsequent frames were coded mid-side, which could be worse off. To not complicate code too much (to make it possible to evaluate only left or right and side frame for example), evaluation of left-side and right-side is completely disabled when loose mid-side is enabled.
* Default to picture type other when unknown picture type is foundMartijn van Beurden2022-05-201-1/+4
| | | | | | | | | When an unknown picture type was found, the resulting type wouldn't occur in the enum, which is undefined behaviour. This commit changes the picture type to 0 (other) when that happens. Credit: Oss-Fuzz Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=46964
* Fix use of undefined valueMartijn van Beurden2022-05-201-1/+2
| | | | | | | | | | | | The mechanism to improve metadata reading added in 0077d3b overrides a FLAC__STREAM_DECODER_ABORTED with FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC causing the decoder to overread a buffer into an uninitialized part. A check is added that ensures searching for frame sync is only set when the decoder is still in a valid state Credit: Oss-Fuzz Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47525
* [CMake] Add /arch:avx2 flag, clarify WITH_SSE2 and WITH_AVX optionsMartijn van Beurden2022-05-201-2/+5
| | | | | | | | | | | Adds /arch:avx2 to the avx2-specific source files. This mirrors the current vcxproj files. While it currently brings no improvements, it might if CPU-specific optimization is left to the compiler instead of with hand-optimized code in the future Also, the exact meaning of options WITH_SSE2 and WITH_AVX is stated, as the first is compile-time only, and the second also has runtime detection
* [CMake] Remove _FORTIFY_SOURCE=1 on not having libsspMartijn van Beurden2022-05-201-3/+1
| | | | | | | Based on some information somewhere on the internet, CMakeLists.txt sets _FORTIFY_SOURCE=2 when its runtime functions are available and _FORTIFY_SOURCE=1 when they are not. However, _FORTIFY_SOURCE=1 also requires runtime functions.
* Fix heap overflow when invalid encoder is used anywayMartijn van Beurden2022-05-191-2/+6
|
* Fix initialization of encoder fuzzer (v1)Martijn van Beurden2022-05-191-10/+16
| | | | | The encoder fuzzer initialized before setting up. This is now swapped without upsetting the way the datasource is queried
* Let fuzzer_encoder_v2 use tmp files to improve coverageMartijn van Beurden2022-05-191-4/+11
|
* tests: Run through shellcheck (#134)Rosen Penev2022-05-1810-81/+81
| | | Signed-off-by: Rosen Penev <rosenp@gmail.com>
* Fix memory leakMartijn van Beurden2022-05-181-2/+7
| | | | | When resetting the decoder, the MD5 buffer wasn't freed but the pointer set to zero anyway.
* Fix initialization of decoder fuzzerMartijn van Beurden2022-05-181-13/+15
| | | | | The decoder fuzzer initialized before setting up. This is now swapped without upsetting the way the datasource is queried
* Simplify and merge win_utf8 files and remove from DLL interfaceMartijn van Beurden2022-05-1724-312/+183
| | | | | | | | | libFLAC DLLs were exposing windows_unicode_filename.h functions because flac and metaflac needed to set flac_internal_set_utf8_ filenames. Files windows_unicode_filename.{c/h} and win_utf8_io.[c/h] are merged, and all non-utf8 parts are removed. With this commit, the libFLAC DLL interface is the same as the libFLAC interface of shared libraries on other platforms
* Revert part of commit 5df56dbMartijn van Beurden2022-05-162-219/+112
| | | | | | | | | | Commit 5df56db introduced four completely rewritten functions with intrinsics, but it turns out two of them have integers that can overflow. Because those two functions were barely faster than what they replaced, fixing these overflows will probably make the functions slower than what they replaced, so this is reverted. Credit: Oss-Fuzz Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47416
* Add checks for decoding from and encoding to UTF-8 filenamesMartijn van Beurden2022-05-125-23/+75
|
* Add residual limit checkingMartijn van Beurden2022-05-112-4/+21
| | | | | This patch adds a (fast) check in the bitreader to detect overflow of the residual
* Make it possible for fuzzer to disable instruction set optimizationsMartijn van Beurden2022-05-113-6/+44
| | | | This should greatly increase code coverage of the encoder fuzzer
* Add abort on encoding error that should not happenMartijn van Beurden2022-05-111-0/+7
| | | | | | | | | | | | | | | This commit lets the following errors trigger an abort: - FLAC__STREAM_ENCODER_OGG_ERROR - FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR - FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA - FLAC__STREAM_ENCODER_IO_ERROR - FLAC__STREAM_ENCODER_FRAMING_ERROR - FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR FLAC__STREAM_ENCODER_CLIENT_ERROR does not trigger an abort because it is used to signal invalid input. FLAC__STREAM_ENCODER_UNINITIALIZED does not trigger an abort because init fails when invalid parameters are given
* Check whether verify decoder is still validMartijn van Beurden2022-05-111-1/+7
| | | | | | | | | Errors returned by the verifing decoder were ignored, while an error often invalidates the assumptions the encoder made about the state of the verifying decoder. If an error was ignored, it could be the decoder outputs an (invalid) frame with a different number of channels than the encoder expects. This could cause heap overflows. This commit adds checks for this occuring.
* Fix overflows in fixed_compute_best_predictorMartijn van Beurden2022-05-093-6/+21
| | | | | Credit: Oss-Fuzz Issue: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47187
* Rename FLAC__get_decoder_client_data to ...Martijn van Beurden2022-05-092-15/+15
| | | | | | ... FLAC__stream_decoder_get_client_data. Also the function definition was moved to its 'siblings'. This way, the function fits better in the API with respect to naming.
* Rewrite of fixed_compute_best_predictor functionsMartijn van Beurden2022-05-081-21/+30
| | | | | The code of fixed_compute_best_predictor was presumable once optimized, but it appears a much more readable form is now equally fast or even faster, see https://github.com/xiph/flac/pull/337 for details.
* Fix fuzzer_encoder_v2 timeoutsMartijn van Beurden2022-05-071-3/+9
| | | | | | | | | This fixes the 'false positive' oss-fuzz bug filed under https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47264 The fuzzer was timing out because of an enormous input (932kB) combined with very slow settings. The commit disables certain slow settings on inputs larger than 2^18 byte.
* Fix distcheckMartijn van Beurden2022-05-062-2/+3
|
* Lengthen test_compression.sh material for benchmarking on CIMartijn van Beurden2022-05-032-4/+5
| | | | | This is necessary to compare CI WITH_ASM=1 and WITH_ASM=0 to be able to check whether this switch does anything
* [CMake] Fix ARM64 intrinsics activationMartijn van Beurden2022-05-033-11/+16
| | | | | | | In 95e2c52 the autotools build worked fine, but CMake missed a few defines. Activition of the lpc_compute_residual_from_qlp_coefficients depended on encoder->private_->cpuinfo.use_asm for no reason, so this dependency is removed
* Add --limit-min-bitrate to flac and add test for itMartijn van Beurden2022-05-024-1/+34
|
* Add API functions to limit minimum bitrateMartijn van Beurden2022-05-0210-29/+126
| | | | | | | | | | | | | Quite a lot of decoders have trouble streaming or seeking in a file with frames that only consist of constant subframes because of the large difference between the largest and smallest subframe. To remedy this, this commit makes it possible to disable the use of constant subframes for the last subframe in case all others are constant with a new API function. This means the minimum bitrate for a FLAC file encoded with this function used is raised to 1bit/sample (i.e. 48kbit/s for 48kHz material). This commit also adds tests to the test suite
* Replace seek error with handling when hitting EOF while reading frameMartijn van Beurden2022-05-011-2/+8
|
* Fix memory leak in stream_decoder.cMartijn van Beurden2022-04-301-1/+7
| | | | | Memory leaked in case FLAC__stream_encoder_set_metadata was used but subsequent init failed
* Add fuzzer_encoder_v2Martijn van Beurden2022-04-303-2/+254
| | | | | | | Add additional fuzzer for the encoder, aiming to reach more coverage than the current encoder fuzzer. This is done by incorporating metadata handling and fixing a problem with different settings in the current fuzzer
* Silence a bunch of MSVC warningsMartijn van Beurden2022-04-308-8/+50
| | | See https://github.com/xiph/flac/issues/313
* Fix uclibc buildFabrice Fontaine2022-04-302-7/+9
| | | | | | | | | | | Commit 4fbb6d4f2ecf2a96c17ea9880108409f852c08a9 reverted commit 44036c9a9b45d03373fe90e9c112852bfc054c51 and so broke again the build on uclibc So put back the sys/auxv.h check as well as a getauxval check in a way that doesn't break iOS Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
* Silence oss-fuzz integer overflow warnings in audio data pathMartijn van Beurden2022-04-303-38/+67
| | | | | | | | | | Because fuzzing feeds bogus predictors and residual samples to the decoder, having overflows in certain functions is unavoidable. Also, because the calculated values are audio path only, there is little potential for security problems Should 'fix' the following reports https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=44824 https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=46964
* Add ARM64 NEON intrinsics lpc_compute_autocorrelation routinesMartijn van Beurden2022-04-294-3/+113
|
* change if checks to ifdefRosen Penev2022-04-295-9/+9
| | | | | | More similar to the rest of the code. Signed-off-by: Rosen Penev <rosenp@gmail.com>
* Adding ARM64 support and optimized Neon implementation (#270)RonenGvili2022-04-2912-3/+1333
| | | | Add NEON intrinsics routines for lpc_compute_residual_from_qlp_coefficients and lpc_compute_residual_from_qlp_coefficients_wide