- Apr 20, 2018
-
-
Mark Adler authored
-
Mark Adler authored
This bug was reported by Danilo Ramos of Eideticom, Inc. It has lain in wait 13 years before being found! The bug was introduced in zlib 1.2.2.2, with the addition of the Z_FIXED option. That option forces the use of fixed Huffman codes. For rare inputs with a large number of distant matches, the pending buffer into which the compressed data is written can overwrite the distance symbol table which it overlays. That results in corrupted output due to invalid distances, and can result in out-of-bound accesses, crashing the application. The fix here combines the distance buffer and literal/length buffers into a single symbol buffer. Now three bytes of pending buffer space are opened up for each literal or length/distance pair consumed, instead of the previous two bytes. This assures that the pending buffer cannot overwrite the symbol table, since the maximum fixed code compressed length/distance is 31 bits, and since there are four bytes of pending space for every three bytes of symbol space.
-
- Jan 31, 2018
-
-
Mark Adler authored
-
- Jan 09, 2018
-
-
Mark Adler authored
-
- Oct 13, 2017
-
-
Mark Adler authored
-
Mark Adler authored
-
Mark Adler authored
In addition, there is not sufficient gain from the inflate assembler code to warrant its inclusion.
-
Mark Adler authored
-
Mark Adler authored
Allegedly the behavior of memcpy() is undefined if the source pointer is NULL, even if the number of bytes to copy is zero.
-
Mark Adler authored
-
Mark Adler authored
-
- Jun 03, 2017
-
-
Mark Adler authored
This isn't the right type anyway to assure that it contains a pointer. That type would be intptr_t or uintptr_t. However the C99 standard says that those types are optional, so their use would not be portable. This commit simply uses size_t or whatever configure decided to use for size_t. That would be the same length as ptrdiff_t, and so will work just as well. The code checks to see if the length of the type used is the same as the length of a void pointer, so there is already protection against the use of the wrong type. The use of size_t (or ptrdiff_t) will almost always work, as all modern architectures have an array size that is the same as the pointer size. Only old segmented architectures would have to fall back to the slower CRC-32 calculation, where the amount of memory that can be accessed is larger than the maximum array size.
-
- Apr 16, 2017
-
-
Mark Adler authored
If zlib and/or gzip header processing was requested, but a header was never provided and inflateSync was used successfully, then the inflate state would be inconsistent, trying to compute a check value but with no flags set. This commit sets the inflate mode to raw in this case, since there is no other assumption that can be made if a header was requested but never seen.
-
- Mar 30, 2017
-
-
Mark Adler authored
-
- Feb 19, 2017
-
-
Mark Adler authored
-
- Feb 16, 2017
-
-
Mark Adler authored
-
Mark Adler authored
Seeing a few percent speedup by using a pointer instead of an assigned structure. This seems to help the compiler to optimize better.
-
Mark Adler authored
-
Mark Adler authored
-
Mark Adler authored
-
Mark Adler authored
This is a problem in the odd case that the second argument of LSEEK is a larger type than off_t. Apparently MinGW defines off_t to be 32 bits, but _lseeki64 has a 64-bit second argument. Also undo a previous commit to permit MinGW to use _lseeki64.
-
Mark Adler authored
As it is used in deflateParams().
-
Mark Adler authored
-
Mark Adler authored
This limits hash table inserts to the available data in the window and to the sliding window size in deflate_stored(). The hash table inserts are deferred until deflateParams() switches to a non-zero compression level.
-
Mark Adler authored
This commit allows a parameter change even if the input data has not all been compressed and copied to the application output buffer, so long as all of the input data has been compressed to the internal pending output buffer. This also allows an immediate deflateParams change so long as there have been no deflate calls since initialization or reset.
-
- Jan 16, 2017
-
-
Mark Adler authored
-
Mark Adler authored
-
- Jan 15, 2017
-
-
Mark Adler authored
This permits deflateParams to change the strategy and level right after deflateInit, without having to wait until a header has been written. The parameters can be changed immediately up until the first deflate call that consumes any input data.
-
Mark Adler authored
This avoids unnecessary filling of bytes in the sliding window buffer when switching from level zero to a non-zero level. This also provides a consistent indication of deflate having taken input for a later commit ...
-
Mark Adler authored
-
Mark Adler authored
And some cosmetic cleanups.
-
Mark Adler authored
-
Mark Adler authored
-
Mark Adler authored
- Jan 03, 2017
-
-
Mark Adler authored
However this ends up not really being solo, since it has to include external libraries.
-
Mark Adler authored
There have been many reports of bugs in the assembler codes intended to speed up deflate and inflate. They are third-party contributions in contrib, and so are not supported by the zlib maintainers.
-
Mark Adler authored
-
Mark Adler authored