summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibCompress
AgeCommit message (Collapse)Author
2021-05-18LibCompress: Discard GZip NAME & COMMENT optional stringsIdan Horowitz
We now discard these strings instead of copying them into a String which we immediately destruct. This should result in both a perf uplift and lower memory usage.
2021-05-16LibCompress: Add missing #includeGunnar Beutner
This previously worked because <AK/ByteBuffer.h> included <AK/Optional.h> - and now it doesn't anymore.
2021-05-16Userland: Add missing #includesGunnar Beutner
These two header files relied on transitive header includes.
2021-05-07LibCompress: Add a method that describes a Gzip HeaderIdan Horowitz
This can be used to display information about a gzip file that is stored in it's header.
2021-05-06Tests: Move LibCompress tests to Tests/LibCompressBrian Gianforcaro
2021-04-29Everywhere: Use "the SerenityOS developers." in copyright headersLinus Groh
We had some inconsistencies before: - Sometimes "The", sometimes "the" - Sometimes trailing ".", sometimes no trailing "." I picked the most common one (lowecase "the", trailing ".") and applied it to all copyright headers. By using the exact same string everywhere we can ensure nothing gets missed during a global search (and replace), and that these inconsistencies are not spread any further (as copyright headers are commonly copied to new files).
2021-04-25AK+Userland: Move AK/TestSuite.h into LibTest and rework Tests' CMakeAndrew Kaster
As many macros as possible are moved to Macros.h, while the macros to create a test case are moved to TestCase.h. TestCase is now the only user-facing header for creating a test case. TestSuite and its helpers have moved into a .cpp file. Instead of requiring a TEST_MAIN macro to be instantiated into the test file, a TestMain.cpp file is provided instead that will be linked against each test. This has the side effect that, if we wanted to have test cases split across multiple files, it's as simple as adding them all to the same executable. The test main should be portable to kernel mode as well, so if there's a set of tests that should be run in self-test mode in kernel space, we can accomodate that. A new serenity_test CMake function streamlines adding a new test with arguments for the test source file, subdirectory under /usr/Tests to install the test application and an optional list of libraries to link against the test application. To accomodate future test where the provided TestMain.cpp is not suitable (e.g. test-js), a CUSTOM_MAIN parameter can be passed to the function to not link against the boilerplate main function.
2021-04-22AK+Userland: Use idan.horowitz@serenityos.org for my copyright headersIdan Horowitz
2021-04-22Everything: Move to SPDX license identifiers in all files.Brian Gianforcaro
SPDX License Identifiers are a more compact / standardized way of representing file license information. See: https://spdx.dev/resources/use/#identifiers This was done with the `ambr` search and replace tool. ambr --no-parent-ignore --key-from-file --rep-from-file key.txt rep.txt *
2021-04-21Tests: Reorganize LibCompress unit testsMarco Biscaro
Move LibCompress unit tests to LibCompress/Tests directory and register them with CMake's add_test. This allows us to run these tests with ninja test instead of running a separate executable. Also split the existing tests in 3 test files that better follow the source code structure (inspired by AK tests).
2021-04-18Everywhere: Fix a bunch of typosLinus Groh
2021-03-21LibCompress: Convert GzipDecompressor from recursive to iterativeIdan Horowitz
This way a gzip compressed file that contains a large amount of small blocks wont cause a stack overflow.
2021-03-19LibCompress: Convert DeflateDecompressor from recursive to iterativeIdan Horowitz
This way a deflate blob that contains a large amount of small blocks wont cause a stack overflow.
2021-03-17LibCompress: fail gracefuly on invalid symbols in DeflateDecompressorIdan Horowitz
2021-03-17LibCompress: Check for impossible back references in DeflateDecompressorIdan Horowitz
This commit makes sure that we fail if an encoded lz77 back reference references bytes that are outside our sliding window, instead of just silently failing, which triggers an assertion down the line.
2021-03-16LibCompress: Fail gracefuly on missing huffman codes in DeflateDecompressorIdan Horowitz
2021-03-16LibCompress: Check and fail for input stream errors in DeflateDecompressorIdan Horowitz
Since we were not checking for error flags set by read_bits we would just always read 0 as the bits' value, which in some edge cases could lead to an infinite loop.
2021-03-16LibCompress: Allow partial header reads in GzipDecompressorIdan Horowitz
We now read the header into a temporary header byte array that is used as the header once its filled up by the input stream, instead of just ending the stream if we are out of bytes mid header.
2021-03-16LibCompress: Handle and propagate stream errors in GzipDecompressorIdan Horowitz
This commit makes read short-circuit if its input stream errored, as well as propagate error handling to wrapped sub streams, similarly to DeflateDecompressor.
2021-03-16LibCompress+AK: Dont short-circuit error handling propagationIdan Horowitz
In the case that both the stream and the wrapped substream had errors to be handled only one of the two would be resolved due to boolean short circuiting. this commit ensures both are handled irregardless of one another.
2021-03-15LibCompress+AK: Propagate error handling to wrapped streamsIdan Horowitz
This ensures that when a DeflateCompressor stream is cleared of any errors its underlying wrapped streams (InputBitStream/InputMemoryStream) will be cleared as well and wont fail a VERIFY on destruction.
2021-03-15LibCompress: Make the Zlib decompressor fail gracefulyIdan Horowitz
This commit adds a verify-less try_create method to the Zlib decompressor to allow for graceful failures of parsing the Zlib headers.
2021-03-14LibCompress: Decrease CanonicalCode's size on stackIdan Horowitz
This commit stores the bit codes as u16s instead of u32s as the maximum code bit length in DEFLATE is 15.
2021-03-14LibCompress: Handle literal only lz77 streams in DeflateCompressorIdan Horowitz
Very incompressible data could sometimes produce no backreferences which would result in no distance huffman code being created (as it was not needed), so VERIFY the code exists only if it is actually needed for writing the stream.
2021-03-13LibCompress: Replace goto with simple recursion in DeflateCompressorIdan Horowitz
This is just a bit easier on the eyes :^)
2021-03-13LibCompress: Implement GZip compressionIdan Horowitz
This commit implements a stream compressor for the gzip specification (RFC 1952), which is essentially a thin wrapper around the DEFLATE compression format.
2021-03-13LibCompress: Implement DEFLATE compressionIdan Horowitz
This commit adds a fully functional DEFLATE compression implementation that can be used to implement compression for higher level formats like gzip, zlib or zip. A large part of this commit is based on Hans Wennborg's great article about the DEFLATE and zip specifications: https://www.hanshq.net/zip.html
2021-03-12Everywhere: Remove klog(), dbg() and purge all LogStream usage :^)Andreas Kling
Good-bye LogStream. Long live AK::Format!
2021-03-07LibCompress: Rename libcompression.so to libcompress.soJelle Raaijmakers
2021-03-03LibCore+LibHTTP+LibGfx: Switch to LibCompressIdan Horowitz
This commit removes the only 3rd party library (and its usages) in serenity: puff, which is used for deflate decompression. and replaces it with the existing original serenity implementation in LibCompress. :^)
2021-02-26Everywhere: Remove a bunch of redundant 'AK::' namespace prefixesLinus Groh
This is basically just for consistency, it's quite strange to see multiple AK container types next to each other, some with and some without the namespace prefix - we're 'using AK::Foo;' a lot and should leverage that. :^)
2021-02-23Everywhere: Rename ASSERT => VERIFYAndreas Kling
(...and ASSERT_NOT_REACHED => VERIFY_NOT_REACHED) Since all of these checks are done in release builds as well, let's rename them to VERIFY to prevent confusion, as everyone is used to assertions being compiled out in release. We can introduce a new ASSERT macro that is specifically for debug checks, but I'm doing this wholesale conversion first since we've accumulated thousands of these already, and it's not immediately obvious which ones are suitable for ASSERT.
2021-01-22Everywhere: Fix typosLinus Groh
2021-01-12Libraries: Move to Userland/Libraries/Andreas Kling