142468Speter
2131377Stjr                Frequently Asked Questions about zlib
342468Speter
442468Speter
5131377StjrIf your question is not there, please check the zlib home page
6205194Sdelphijhttp://zlib.net/ which may have more recent information.
7205194SdelphijThe lastest zlib FAQ is at http://zlib.net/zlib_faq.html
842468Speter
942468Speter
1092111Sgreen 1. Is zlib Y2K-compliant?
1142468Speter
1292111Sgreen    Yes. zlib doesn't handle dates.
1342468Speter
1492111Sgreen 2. Where can I get a Windows DLL version?
1542468Speter
16205194Sdelphij    The zlib sources can be compiled without change to produce a DLL.  See the
17205194Sdelphij    file win32/DLL_FAQ.txt in the zlib distribution.  Pointers to the
18205194Sdelphij    precompiled DLL are found in the zlib web site at http://zlib.net/ .
1942468Speter
2092111Sgreen 3. Where can I get a Visual Basic interface to zlib?
2142468Speter
2292111Sgreen    See
23205194Sdelphij        * http://marknelson.us/1997/01/01/zlib-engine/
24145474Skientzle        * win32/DLL_FAQ.txt in the zlib distribution
2542468Speter
26145474Skientzle 4. compress() returns Z_BUF_ERROR.
2742468Speter
28205194Sdelphij    Make sure that before the call of compress(), the length of the compressed
29205194Sdelphij    buffer is equal to the available size of the compressed buffer and not
30205194Sdelphij    zero.  For Visual Basic, check that this parameter is passed by reference
3192111Sgreen    ("as any"), not by value ("as long").
3242468Speter
33145474Skientzle 5. deflate() or inflate() returns Z_BUF_ERROR.
3442468Speter
35205194Sdelphij    Before making the call, make sure that avail_in and avail_out are not zero.
36205194Sdelphij    When setting the parameter flush equal to Z_FINISH, also make sure that
37205194Sdelphij    avail_out is big enough to allow processing all pending input.  Note that a
38205194Sdelphij    Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be
39205194Sdelphij    made with more input or output space.  A Z_BUF_ERROR may in fact be
40205194Sdelphij    unavoidable depending on how the functions are used, since it is not
41205194Sdelphij    possible to tell whether or not there is more output pending when
42205194Sdelphij    strm.avail_out returns with zero.  See http://zlib.net/zlib_how.html for a
43205194Sdelphij    heavily annotated example.
4442468Speter
4592111Sgreen 6. Where's the zlib documentation (man pages, etc.)?
4642468Speter
47230837Sdelphij    It's in zlib.h .  Examples of zlib usage are in the files test/example.c
48230837Sdelphij    and test/minigzip.c, with more in examples/ .
4942468Speter
5092111Sgreen 7. Why don't you use GNU autoconf or libtool or ...?
5142468Speter
52205194Sdelphij    Because we would like to keep zlib as a very small and simple package.
53205194Sdelphij    zlib is rather portable and doesn't need much configuration.
5442468Speter
5592111Sgreen 8. I found a bug in zlib.
5642468Speter
57205194Sdelphij    Most of the time, such problems are due to an incorrect usage of zlib.
58205194Sdelphij    Please try to reproduce the problem with a small program and send the
59205194Sdelphij    corresponding source to us at zlib@gzip.org .  Do not send multi-megabyte
60205194Sdelphij    data files without prior agreement.
6142468Speter
6292111Sgreen 9. Why do I get "undefined reference to gzputc"?
6342468Speter
6492111Sgreen    If "make test" produces something like
6542468Speter
6692111Sgreen       example.o(.text+0x154): undefined reference to `gzputc'
67131377Stjr
6892111Sgreen    check that you don't have old files libz.* in /usr/lib, /usr/local/lib or
6992111Sgreen    /usr/X11R6/lib. Remove any old versions, then do "make install".
7042468Speter
7192111Sgreen10. I need a Delphi interface to zlib.
7242468Speter
73131377Stjr    See the contrib/delphi directory in the zlib distribution.
7442468Speter
7592111Sgreen11. Can zlib handle .zip archives?
7642468Speter
77145474Skientzle    Not by itself, no.  See the directory contrib/minizip in the zlib
78145474Skientzle    distribution.
7942468Speter
8092111Sgreen12. Can zlib handle .Z files?
8142468Speter
82205194Sdelphij    No, sorry.  You have to spawn an uncompress or gunzip subprocess, or adapt
8392111Sgreen    the code of uncompress on your own.
8442468Speter
8592111Sgreen13. How can I make a Unix shared library?
8692111Sgreen
87230837Sdelphij    By default a shared (and a static) library is built for Unix.  So:
88230837Sdelphij
89230837Sdelphij    make distclean
90230837Sdelphij    ./configure
9192111Sgreen    make
9292111Sgreen
93131377Stjr14. How do I install a shared zlib library on Unix?
9492111Sgreen
95145474Skientzle    After the above, then:
96145474Skientzle
97131377Stjr    make install
9892111Sgreen
99131377Stjr    However, many flavors of Unix come with a shared zlib already installed.
100131377Stjr    Before going to the trouble of compiling a shared version of zlib and
101205194Sdelphij    trying to install it, you may want to check if it's already there!  If you
102205194Sdelphij    can #include <zlib.h>, it's there.  The -lz option will probably link to
103205194Sdelphij    it.  You can check the version at the top of zlib.h or with the
104205194Sdelphij    ZLIB_VERSION symbol defined in zlib.h .
105131377Stjr
106145474Skientzle15. I have a question about OttoPDF.
10792111Sgreen
10892111Sgreen    We are not the authors of OttoPDF. The real author is on the OttoPDF web
109145474Skientzle    site: Joel Hainley, jhainley@myndkryme.com.
110131377Stjr
111145474Skientzle16. Can zlib decode Flate data in an Adobe PDF file?
112131377Stjr
113205194Sdelphij    Yes. See http://www.pdflib.com/ . To modify PDF forms, see
114205194Sdelphij    http://sourceforge.net/projects/acroformtool/ .
115145474Skientzle
116145474Skientzle17. Why am I getting this "register_frame_info not found" error on Solaris?
117145474Skientzle
118145474Skientzle    After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib
119145474Skientzle    generates an error such as:
120145474Skientzle
121145474Skientzle        ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so:
122145474Skientzle        symbol __register_frame_info: referenced symbol not found
123145474Skientzle
124145474Skientzle    The symbol __register_frame_info is not part of zlib, it is generated by
125205194Sdelphij    the C compiler (cc or gcc).  You must recompile applications using zlib
126205194Sdelphij    which have this problem.  This problem is specific to Solaris.  See
127145474Skientzle    http://www.sunfreeware.com for Solaris versions of zlib and applications
128145474Skientzle    using zlib.
129145474Skientzle
130145474Skientzle18. Why does gzip give an error on a file I make with compress/deflate?
131145474Skientzle
132131377Stjr    The compress and deflate functions produce data in the zlib format, which
133205194Sdelphij    is different and incompatible with the gzip format.  The gz* functions in
134205194Sdelphij    zlib on the other hand use the gzip format.  Both the zlib and gzip formats
135205194Sdelphij    use the same compressed data format internally, but have different headers
136205194Sdelphij    and trailers around the compressed data.
137131377Stjr
138145474Skientzle19. Ok, so why are there two different formats?
139131377Stjr
140205194Sdelphij    The gzip format was designed to retain the directory information about a
141205194Sdelphij    single file, such as the name and last modification date.  The zlib format
142205194Sdelphij    on the other hand was designed for in-memory and communication channel
143205194Sdelphij    applications, and has a much more compact header and trailer and uses a
144205194Sdelphij    faster integrity check than gzip.
145131377Stjr
146145474Skientzle20. Well that's nice, but how do I make a gzip file in memory?
147131377Stjr
148131377Stjr    You can request that deflate write the gzip format instead of the zlib
149205194Sdelphij    format using deflateInit2().  You can also request that inflate decode the
150205194Sdelphij    gzip format using inflateInit2().  Read zlib.h for more details.
151131377Stjr
152145474Skientzle21. Is zlib thread-safe?
153131377Stjr
154205194Sdelphij    Yes.  However any library routines that zlib uses and any application-
155205194Sdelphij    provided memory allocation routines must also be thread-safe.  zlib's gz*
156131377Stjr    functions use stdio library routines, and most of zlib's functions use the
157205194Sdelphij    library memory allocation routines by default.  zlib's *Init* functions
158205194Sdelphij    allow for the application to provide custom memory allocation routines.
159131377Stjr
160131377Stjr    Of course, you should only operate on any given zlib or gzip stream from a
161131377Stjr    single thread at a time.
162131377Stjr
163145474Skientzle22. Can I use zlib in my commercial application?
164131377Stjr
165205194Sdelphij    Yes.  Please read the license in zlib.h.
166131377Stjr
167145474Skientzle23. Is zlib under the GNU license?
168131377Stjr
169205194Sdelphij    No.  Please read the license in zlib.h.
170131377Stjr
171145474Skientzle24. The license says that altered source versions must be "plainly marked". So
172131377Stjr    what exactly do I need to do to meet that requirement?
173131377Stjr
174205194Sdelphij    You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h.  In
175131377Stjr    particular, the final version number needs to be changed to "f", and an
176205194Sdelphij    identification string should be appended to ZLIB_VERSION.  Version numbers
177131377Stjr    x.x.x.f are reserved for modifications to zlib by others than the zlib
178205194Sdelphij    maintainers.  For example, if the version of the base zlib you are altering
179131377Stjr    is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and
180205194Sdelphij    ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3".  You can also
181131377Stjr    update the version strings in deflate.c and inftrees.c.
182131377Stjr
183131377Stjr    For altered source distributions, you should also note the origin and
184131377Stjr    nature of the changes in zlib.h, as well as in ChangeLog and README, along
185205194Sdelphij    with the dates of the alterations.  The origin should include at least your
186131377Stjr    name (or your company's name), and an email address to contact for help or
187131377Stjr    issues with the library.
188131377Stjr
189131377Stjr    Note that distributing a compiled zlib library along with zlib.h and
190131377Stjr    zconf.h is also a source distribution, and so you should change
191131377Stjr    ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes
192131377Stjr    in zlib.h as you would for a full source distribution.
193131377Stjr
194145474Skientzle25. Will zlib work on a big-endian or little-endian architecture, and can I
195131377Stjr    exchange compressed data between them?
196131377Stjr
197131377Stjr    Yes and yes.
198131377Stjr
199145474Skientzle26. Will zlib work on a 64-bit machine?
200131377Stjr
201205194Sdelphij    Yes.  It has been tested on 64-bit machines, and has no dependence on any
202205194Sdelphij    data types being limited to 32-bits in length.  If you have any
203131377Stjr    difficulties, please provide a complete problem report to zlib@gzip.org
204131377Stjr
205145474Skientzle27. Will zlib decompress data from the PKWare Data Compression Library?
206131377Stjr
207205194Sdelphij    No.  The PKWare DCL uses a completely different compressed data format than
208205194Sdelphij    does PKZIP and zlib.  However, you can look in zlib's contrib/blast
209131377Stjr    directory for a possible solution to your problem.
210131377Stjr
211145474Skientzle28. Can I access data randomly in a compressed stream?
212131377Stjr
213205194Sdelphij    No, not without some preparation.  If when compressing you periodically use
214205194Sdelphij    Z_FULL_FLUSH, carefully write all the pending data at those points, and
215205194Sdelphij    keep an index of those locations, then you can start decompression at those
216205194Sdelphij    points.  You have to be careful to not use Z_FULL_FLUSH too often, since it
217205194Sdelphij    can significantly degrade compression.  Alternatively, you can scan a
218205194Sdelphij    deflate stream once to generate an index, and then use that index for
219205194Sdelphij    random access.  See examples/zran.c .
220131377Stjr
221145474Skientzle29. Does zlib work on MVS, OS/390, CICS, etc.?
222131377Stjr
223205194Sdelphij    It has in the past, but we have not heard of any recent evidence.  There
224205194Sdelphij    were working ports of zlib 1.1.4 to MVS, but those links no longer work.
225205194Sdelphij    If you know of recent, successful applications of zlib on these operating
226205194Sdelphij    systems, please let us know.  Thanks.
227131377Stjr
228205194Sdelphij30. Is there some simpler, easier to read version of inflate I can look at to
229205194Sdelphij    understand the deflate format?
230131377Stjr
231205194Sdelphij    First off, you should read RFC 1951.  Second, yes.  Look in zlib's
232131377Stjr    contrib/puff directory.
233131377Stjr
234145474Skientzle31. Does zlib infringe on any patents?
235131377Stjr
236205194Sdelphij    As far as we know, no.  In fact, that was originally the whole point behind
237205194Sdelphij    zlib.  Look here for some more information:
238131377Stjr
239131377Stjr    http://www.gzip.org/#faq11
240131377Stjr
241145474Skientzle32. Can zlib work with greater than 4 GB of data?
242131377Stjr
243205194Sdelphij    Yes.  inflate() and deflate() will process any amount of data correctly.
244131377Stjr    Each call of inflate() or deflate() is limited to input and output chunks
245131377Stjr    of the maximum value that can be stored in the compiler's "unsigned int"
246205194Sdelphij    type, but there is no limit to the number of chunks.  Note however that the
247205194Sdelphij    strm.total_in and strm_total_out counters may be limited to 4 GB.  These
248131377Stjr    counters are provided as a convenience and are not used internally by
249205194Sdelphij    inflate() or deflate().  The application can easily set up its own counters
250131377Stjr    updated after each call of inflate() or deflate() to count beyond 4 GB.
251131377Stjr    compress() and uncompress() may be limited to 4 GB, since they operate in a
252205194Sdelphij    single call.  gzseek() and gztell() may be limited to 4 GB depending on how
253205194Sdelphij    zlib is compiled.  See the zlibCompileFlags() function in zlib.h.
254131377Stjr
255205194Sdelphij    The word "may" appears several times above since there is a 4 GB limit only
256205194Sdelphij    if the compiler's "long" type is 32 bits.  If the compiler's "long" type is
257205194Sdelphij    64 bits, then the limit is 16 exabytes.
258131377Stjr
259145474Skientzle33. Does zlib have any security vulnerabilities?
260131377Stjr
261205194Sdelphij    The only one that we are aware of is potentially in gzprintf().  If zlib is
262205194Sdelphij    compiled to use sprintf() or vsprintf(), then there is no protection
263205194Sdelphij    against a buffer overflow of an 8K string space (or other value as set by
264205194Sdelphij    gzbuffer()), other than the caller of gzprintf() assuring that the output
265205194Sdelphij    will not exceed 8K.  On the other hand, if zlib is compiled to use
266205194Sdelphij    snprintf() or vsnprintf(), which should normally be the case, then there is
267205194Sdelphij    no vulnerability.  The ./configure script will display warnings if an
268205194Sdelphij    insecure variation of sprintf() will be used by gzprintf().  Also the
269205194Sdelphij    zlibCompileFlags() function will return information on what variant of
270205194Sdelphij    sprintf() is used by gzprintf().
271131377Stjr
272131377Stjr    If you don't have snprintf() or vsnprintf() and would like one, you can
273131377Stjr    find a portable implementation here:
274131377Stjr
275131377Stjr        http://www.ijs.si/software/snprintf/
276131377Stjr
277205194Sdelphij    Note that you should be using the most recent version of zlib.  Versions
278205194Sdelphij    1.1.3 and before were subject to a double-free vulnerability, and versions
279205194Sdelphij    1.2.1 and 1.2.2 were subject to an access exception when decompressing
280205194Sdelphij    invalid compressed data.
281131377Stjr
282145474Skientzle34. Is there a Java version of zlib?
283131377Stjr
284131377Stjr    Probably what you want is to use zlib in Java. zlib is already included
285131377Stjr    as part of the Java SDK in the java.util.zip package. If you really want
286131377Stjr    a version of zlib written in the Java language, look on the zlib home
287205194Sdelphij    page for links: http://zlib.net/ .
288131377Stjr
289145474Skientzle35. I get this or that compiler or source-code scanner warning when I crank it
290145474Skientzle    up to maximally-pedantic. Can't you guys write proper code?
291131377Stjr
292131377Stjr    Many years ago, we gave up attempting to avoid warnings on every compiler
293205194Sdelphij    in the universe.  It just got to be a waste of time, and some compilers
294205194Sdelphij    were downright silly as well as contradicted each other.  So now, we simply
295205194Sdelphij    make sure that the code always works.
296131377Stjr
297157043Sdes36. Valgrind (or some similar memory access checker) says that deflate is
298157043Sdes    performing a conditional jump that depends on an uninitialized value.
299157043Sdes    Isn't that a bug?
300157043Sdes
301205194Sdelphij    No.  That is intentional for performance reasons, and the output of deflate
302205194Sdelphij    is not affected.  This only started showing up recently since zlib 1.2.x
303205194Sdelphij    uses malloc() by default for allocations, whereas earlier versions used
304205194Sdelphij    calloc(), which zeros out the allocated memory.  Even though the code was
305205194Sdelphij    correct, versions 1.2.4 and later was changed to not stimulate these
306205194Sdelphij    checkers.
307157043Sdes
308157043Sdes37. Will zlib read the (insert any ancient or arcane format here) compressed
309131377Stjr    data format?
310131377Stjr
311131377Stjr    Probably not. Look in the comp.compression FAQ for pointers to various
312131377Stjr    formats and associated software.
313131377Stjr
314157043Sdes38. How can I encrypt/decrypt zip files with zlib?
315131377Stjr
316205194Sdelphij    zlib doesn't support encryption.  The original PKZIP encryption is very
317205194Sdelphij    weak and can be broken with freely available programs.  To get strong
318205194Sdelphij    encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib
319205194Sdelphij    compression.  For PKZIP compatible "encryption", look at
320205194Sdelphij    http://www.info-zip.org/
321131377Stjr
322157043Sdes39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
323131377Stjr
324205194Sdelphij    "gzip" is the gzip format, and "deflate" is the zlib format.  They should
325205194Sdelphij    probably have called the second one "zlib" instead to avoid confusion with
326205194Sdelphij    the raw deflate compressed data format.  While the HTTP 1.1 RFC 2616
327131377Stjr    correctly points to the zlib specification in RFC 1950 for the "deflate"
328131377Stjr    transfer encoding, there have been reports of servers and browsers that
329131377Stjr    incorrectly produce or expect raw deflate data per the deflate
330230837Sdelphij    specification in RFC 1951, most notably Microsoft.  So even though the
331131377Stjr    "deflate" transfer encoding using the zlib format would be the more
332131377Stjr    efficient approach (and in fact exactly what the zlib format was designed
333131377Stjr    for), using the "gzip" transfer encoding is probably more reliable due to
334131377Stjr    an unfortunate choice of name on the part of the HTTP 1.1 authors.
335131377Stjr
336131377Stjr    Bottom line: use the gzip format for HTTP 1.1 encoding.
337131377Stjr
338157043Sdes40. Does zlib support the new "Deflate64" format introduced by PKWare?
339131377Stjr
340205194Sdelphij    No.  PKWare has apparently decided to keep that format proprietary, since
341205194Sdelphij    they have not documented it as they have previous compression formats.  In
342205194Sdelphij    any case, the compression improvements are so modest compared to other more
343205194Sdelphij    modern approaches, that it's not worth the effort to implement.
344131377Stjr
345205194Sdelphij41. I'm having a problem with the zip functions in zlib, can you help?
346205194Sdelphij
347205194Sdelphij    There are no zip functions in zlib.  You are probably using minizip by
348205194Sdelphij    Giles Vollant, which is found in the contrib directory of zlib.  It is not
349205194Sdelphij    part of zlib.  In fact none of the stuff in contrib is part of zlib.  The
350205194Sdelphij    files in there are not supported by the zlib authors.  You need to contact
351205194Sdelphij    the authors of the respective contribution for help.
352205194Sdelphij
353205194Sdelphij42. The match.asm code in contrib is under the GNU General Public License.
354205194Sdelphij    Since it's part of zlib, doesn't that mean that all of zlib falls under the
355205194Sdelphij    GNU GPL?
356205194Sdelphij
357205194Sdelphij    No.  The files in contrib are not part of zlib.  They were contributed by
358205194Sdelphij    other authors and are provided as a convenience to the user within the zlib
359205194Sdelphij    distribution.  Each item in contrib has its own license.
360205194Sdelphij
361205194Sdelphij43. Is zlib subject to export controls?  What is its ECCN?
362205194Sdelphij
363205194Sdelphij    zlib is not subject to export controls, and so is classified as EAR99.
364205194Sdelphij
365205194Sdelphij44. Can you please sign these lengthy legal documents and fax them back to us
366131377Stjr    so that we can use your software in our product?
367131377Stjr
368131377Stjr    No. Go away. Shoo.
369