Mark Adler [Sun, 4 Oct 2015 18:45:00 +0000 (11:45 -0700)]
Use a consistent and more modern approach to not use a parameter.
A remarkably creative and diverse set of approaches to letting the
compiler know that opaque was being used when it wasn't is changed
by this commit to the more standard (void)opaque.
Mark Adler [Sun, 2 Aug 2015 21:46:58 +0000 (14:46 -0700)]
Allow building zlib outside of the source directory.
To build, simply run configure from the source directory by
specifying its path. That path will be used to find the source
files. The source directory will not be touched. All new and
modified files will be made in the current directory. Discovered
in the process that not all makes understand % or $<, and not all
compilers understand -include or -I-. This required a larger
Makefile.in with explicit dependencies.
Mark Adler [Sun, 2 Aug 2015 07:02:07 +0000 (00:02 -0700)]
Align deflateParams() and its documentation in zlib.h.
This updates the documentation to reflect the behavior of
deflateParams() when it is not able to compress all of the input
data provided so far due to insufficient output space. It also
assures that data provided is compressed before the parameter
changes, even if at the beginning of the stream.
Mark Adler [Wed, 29 Jul 2015 04:41:20 +0000 (21:41 -0700)]
Fix inflateInit2() bug when windowBits is 16 or 32.
A windowBits value of 0, 16, or 32 gets the window bits from the
zlib header. However there is no zlib header for 16, or for 32
when the input is gzip. This commit sets the window bits for
inflate to 15 if a gzip stream is detected and windowBits was 16
or 32.
Mark Adler [Thu, 24 Apr 2014 23:45:36 +0000 (19:45 -0400)]
Assure that gzoffset() is correct when appending.
An open() with O_APPEND followed by an lseek() to determine the
position will return zero for a non-empty file, even though the
next write will start at the end of the file. This commit works
around that by doing an lseek() to the end when appending.
Mark Adler [Sat, 24 Aug 2013 08:53:31 +0000 (01:53 -0700)]
Improve contrib/blast to return unused bytes. Fix the test code
to report the count of unused bytes at the end correctly. Add the
ability to provide initial input to blast().
Mark Adler [Sun, 14 Apr 2013 17:31:31 +0000 (10:31 -0700)]
Do not force Z_CONST for C++.
Forcing Z_CONST resulted in an issue when compiling Firefox. Now
if someone wants to compile zlib as C++ code (which it isn't), now
they will need to #define Z_CONST themselves.
Mark Adler [Mon, 25 Mar 2013 05:12:31 +0000 (22:12 -0700)]
Do not return Z_BUF_ERROR if deflateParam() has nothing to write.
If the compressed data was already at a block boundary, then
deflateParam() would report Z_BUF_ERROR, because there was nothing
to write. With this patch, Z_OK is returned in that case.
Mark Adler [Sun, 24 Mar 2013 05:27:43 +0000 (22:27 -0700)]
Remove runtime check in configure for four-byte integer type.
That didn't work when cross-compiling. Simply rely on limits.h.
If a compiler does not have limits.h, then zconf.h.in should be
modified to define Z_U4 as an unsiged four-byte integer type in
order for crc32() to be fast.
This also simplifies and makes more portable to check for a four-
byte type using limits.h.
Mark Adler [Tue, 19 Feb 2013 05:06:35 +0000 (21:06 -0800)]
Fix serious but very rare decompression bug in inftrees.c.
inftrees.c compared the number of used table entries to the maximum
allowed value using >= instead of >. This patch fixes those to use
>. The bug was discovered by Ignat Kolesnichenko of Yandex LC
where they have run petabytes of data through zlib. Triggering the
bug is apparently very rare, seeing as how it has been out there in
the wild for almost three years before being discovered. The bug
is instantiated only if the exact maximum number of decoding table
entries, ENOUGH_DISTS or ENOUGH_LENS is used by the block being
decoded, resulting in the false positive of overflowing the table.
Mark Adler [Tue, 2 Oct 2012 05:42:35 +0000 (22:42 -0700)]
Fix bug in gzclose() when gzwrite() runs out of memory.
If the deflateInit2() called for the first gzwrite() failed with a
Z_MEM_ERROR, then a subsequent gzclose() would try to free an
already freed pointer. This fixes that.
Mark Adler [Sun, 30 Sep 2012 05:23:47 +0000 (22:23 -0700)]
Fix bug where gzopen(), gzclose() would write an empty file.
A gzopen() to write (mode "w") followed immediately by a gzclose()
would output an empty zero-length file. What it should do is write
an empty gzip file, with the gzip header, empty deflate content,
and gzip trailer totalling 20 bytes. This fixes it to do that.
Mark Adler [Fri, 24 Aug 2012 22:02:28 +0000 (15:02 -0700)]
Fix unintialized value bug in gzputc() introduced by const patches.
Avoid the use of an uninitialized value when the write buffers have
not been initialized. A recent change to avoid the use of strm->
next_in in order to resolve some const conflicts added the use of
state->in in its place. This patch avoids the use of state->in
when it is not initialized. Nothing bad would actually happen,
since two variables set to the same unintialized value are
subtracted. However valgrind was rightly complaining. So this
fixes that.
Mark Adler [Sun, 19 Aug 2012 00:59:50 +0000 (17:59 -0700)]
Avoid shift equal to bits in type (caused endless loop).
Also clean up comparisons between different types, and some odd
indentation problems that showed up somehow.
A new endless loop was introduced by the clang compiler, which
apparently does odd things when the right operand of << is equal to
or greater than the number of bits in the type. The C standard in
fact states that the behavior of << is undefined in that case. The
loop was rewritten to use single-bit shifts.
Mark Adler [Mon, 13 Aug 2012 01:08:52 +0000 (18:08 -0700)]
Clean up the usage of z_const and respect const usage within zlib.
This patch allows zlib to compile cleanly with the -Wcast-qual gcc
warning enabled, but only if ZLIB_CONST is defined, which adds
const to next_in and msg in z_stream and in the in_func prototype.
A --const option is added to ./configure which adds -DZLIB_CONST
to the compile flags, and adds -Wcast-qual to the compile flags
when ZLIBGCCWARN is set in the environment.
Mark Adler [Sun, 10 Jun 2012 05:42:24 +0000 (22:42 -0700)]
Fix configure check for veracity of compiler error return codes.
There were two problems before that this fixes. One was that the
check for the compiler error return code preceded the determination
of the compiler and its options. The other was that the checks
for compiler and library characteristics could be fooled if the
error options were set to reject K&R-style C. configure now aborts
if the compiler produces a hard error on K&R-style C.
In addition, aborts of configure are now consistent, and remove
any temporary files.
Mark Adler [Sun, 10 Jun 2012 02:15:36 +0000 (19:15 -0700)]
On Darwin, only use /usr/bin/libtool if libtool is not Apple.
The original change was to always use /usr/bin/libtool on Darwin,
in order to avoid using a GNU libtool installed by the user in the
path ahead of Apple's libtool. However someone might install a
more recent Apple libtool ahead of /usr/bin/libtool. This commit
checks to see if libtool is Apple, and uses /usr/bin/libtool if it
isn't.
Mark Adler [Sun, 3 Jun 2012 19:45:55 +0000 (12:45 -0700)]
Use _snprintf for snprinf in Microsoft C.
More than a decade later, Microsoft C does not support the C99
standard. It's good that _snprintf has a different name, since it
does not guarantee that the result is null terminated, as does
snprintf. However where _snprintf is used under Microsoft C, the
destination string is assured to be long enough, so this will not
be a problem. This occurs in two places, both in gzlib.c. Where
sprintf functionality is needed by gzprintf, vsnprintf is used in
the case of Microsoft C.