annotate Modules/zlib/FAQ @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 224aa49f22f1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
1
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
2 Frequently Asked Questions about zlib
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
3
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
4
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
5 If your question is not there, please check the zlib home page
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
6 http://zlib.net/ which may have more recent information.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
7 The lastest zlib FAQ is at http://zlib.net/zlib_faq.html
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
8
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
9
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
10 1. Is zlib Y2K-compliant?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
11
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
12 Yes. zlib doesn't handle dates.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
13
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
14 2. Where can I get a Windows DLL version?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
15
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
16 The zlib sources can be compiled without change to produce a DLL. See the
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
17 file win32/DLL_FAQ.txt in the zlib distribution. Pointers to the
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
18 precompiled DLL are found in the zlib web site at http://zlib.net/ .
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
19
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
20 3. Where can I get a Visual Basic interface to zlib?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
21
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
22 See
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
23 * http://marknelson.us/1997/01/01/zlib-engine/
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
24 * win32/DLL_FAQ.txt in the zlib distribution
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
25
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
26 4. compress() returns Z_BUF_ERROR.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
27
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
28 Make sure that before the call of compress(), the length of the compressed
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
29 buffer is equal to the available size of the compressed buffer and not
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
30 zero. For Visual Basic, check that this parameter is passed by reference
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
31 ("as any"), not by value ("as long").
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
32
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
33 5. deflate() or inflate() returns Z_BUF_ERROR.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
34
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
35 Before making the call, make sure that avail_in and avail_out are not zero.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
36 When setting the parameter flush equal to Z_FINISH, also make sure that
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
37 avail_out is big enough to allow processing all pending input. Note that a
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
38 Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
39 made with more input or output space. A Z_BUF_ERROR may in fact be
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
40 unavoidable depending on how the functions are used, since it is not
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
41 possible to tell whether or not there is more output pending when
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
42 strm.avail_out returns with zero. See http://zlib.net/zlib_how.html for a
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
43 heavily annotated example.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
44
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
45 6. Where's the zlib documentation (man pages, etc.)?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
46
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 63336
diff changeset
47 It's in zlib.h . Examples of zlib usage are in the files test/example.c
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 63336
diff changeset
48 and test/minigzip.c, with more in examples/ .
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
49
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
50 7. Why don't you use GNU autoconf or libtool or ...?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
51
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
52 Because we would like to keep zlib as a very small and simple package.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
53 zlib is rather portable and doesn't need much configuration.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
54
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
55 8. I found a bug in zlib.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
56
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
57 Most of the time, such problems are due to an incorrect usage of zlib.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
58 Please try to reproduce the problem with a small program and send the
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
59 corresponding source to us at zlib@gzip.org . Do not send multi-megabyte
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
60 data files without prior agreement.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
61
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
62 9. Why do I get "undefined reference to gzputc"?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
63
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
64 If "make test" produces something like
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
65
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
66 example.o(.text+0x154): undefined reference to `gzputc'
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
67
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
68 check that you don't have old files libz.* in /usr/lib, /usr/local/lib or
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
69 /usr/X11R6/lib. Remove any old versions, then do "make install".
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
70
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
71 10. I need a Delphi interface to zlib.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
72
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
73 See the contrib/delphi directory in the zlib distribution.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
74
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
75 11. Can zlib handle .zip archives?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
76
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
77 Not by itself, no. See the directory contrib/minizip in the zlib
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
78 distribution.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
79
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
80 12. Can zlib handle .Z files?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
81
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
82 No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
83 the code of uncompress on your own.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
84
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
85 13. How can I make a Unix shared library?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
86
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 63336
diff changeset
87 By default a shared (and a static) library is built for Unix. So:
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 63336
diff changeset
88
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 63336
diff changeset
89 make distclean
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 63336
diff changeset
90 ./configure
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
91 make
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
92
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
93 14. How do I install a shared zlib library on Unix?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
94
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
95 After the above, then:
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
96
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
97 make install
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
98
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
99 However, many flavors of Unix come with a shared zlib already installed.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
100 Before going to the trouble of compiling a shared version of zlib and
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
101 trying to install it, you may want to check if it's already there! If you
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
102 can #include <zlib.h>, it's there. The -lz option will probably link to
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
103 it. You can check the version at the top of zlib.h or with the
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
104 ZLIB_VERSION symbol defined in zlib.h .
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
105
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
106 15. I have a question about OttoPDF.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
107
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
108 We are not the authors of OttoPDF. The real author is on the OttoPDF web
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
109 site: Joel Hainley, jhainley@myndkryme.com.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
110
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
111 16. Can zlib decode Flate data in an Adobe PDF file?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
112
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
113 Yes. See http://www.pdflib.com/ . To modify PDF forms, see
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
114 http://sourceforge.net/projects/acroformtool/ .
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
115
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
116 17. Why am I getting this "register_frame_info not found" error on Solaris?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
117
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
118 After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
119 generates an error such as:
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
120
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
121 ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so:
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
122 symbol __register_frame_info: referenced symbol not found
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
123
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
124 The symbol __register_frame_info is not part of zlib, it is generated by
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
125 the C compiler (cc or gcc). You must recompile applications using zlib
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
126 which have this problem. This problem is specific to Solaris. See
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
127 http://www.sunfreeware.com for Solaris versions of zlib and applications
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
128 using zlib.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
129
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
130 18. Why does gzip give an error on a file I make with compress/deflate?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
131
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
132 The compress and deflate functions produce data in the zlib format, which
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
133 is different and incompatible with the gzip format. The gz* functions in
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
134 zlib on the other hand use the gzip format. Both the zlib and gzip formats
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
135 use the same compressed data format internally, but have different headers
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
136 and trailers around the compressed data.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
137
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
138 19. Ok, so why are there two different formats?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
139
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
140 The gzip format was designed to retain the directory information about a
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
141 single file, such as the name and last modification date. The zlib format
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
142 on the other hand was designed for in-memory and communication channel
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
143 applications, and has a much more compact header and trailer and uses a
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
144 faster integrity check than gzip.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
145
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
146 20. Well that's nice, but how do I make a gzip file in memory?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
147
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
148 You can request that deflate write the gzip format instead of the zlib
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
149 format using deflateInit2(). You can also request that inflate decode the
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
150 gzip format using inflateInit2(). Read zlib.h for more details.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
151
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
152 21. Is zlib thread-safe?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
153
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
154 Yes. However any library routines that zlib uses and any application-
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
155 provided memory allocation routines must also be thread-safe. zlib's gz*
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
156 functions use stdio library routines, and most of zlib's functions use the
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
157 library memory allocation routines by default. zlib's *Init* functions
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
158 allow for the application to provide custom memory allocation routines.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
159
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
160 Of course, you should only operate on any given zlib or gzip stream from a
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
161 single thread at a time.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
162
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
163 22. Can I use zlib in my commercial application?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
164
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
165 Yes. Please read the license in zlib.h.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
166
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
167 23. Is zlib under the GNU license?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
168
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
169 No. Please read the license in zlib.h.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
170
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
171 24. The license says that altered source versions must be "plainly marked". So
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
172 what exactly do I need to do to meet that requirement?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
173
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
174 You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
175 particular, the final version number needs to be changed to "f", and an
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
176 identification string should be appended to ZLIB_VERSION. Version numbers
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
177 x.x.x.f are reserved for modifications to zlib by others than the zlib
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
178 maintainers. For example, if the version of the base zlib you are altering
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
179 is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
180 ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
181 update the version strings in deflate.c and inftrees.c.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
182
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
183 For altered source distributions, you should also note the origin and
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
184 nature of the changes in zlib.h, as well as in ChangeLog and README, along
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
185 with the dates of the alterations. The origin should include at least your
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
186 name (or your company's name), and an email address to contact for help or
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
187 issues with the library.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
188
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
189 Note that distributing a compiled zlib library along with zlib.h and
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
190 zconf.h is also a source distribution, and so you should change
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
191 ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
192 in zlib.h as you would for a full source distribution.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
193
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
194 25. Will zlib work on a big-endian or little-endian architecture, and can I
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
195 exchange compressed data between them?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
196
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
197 Yes and yes.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
198
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
199 26. Will zlib work on a 64-bit machine?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
200
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
201 Yes. It has been tested on 64-bit machines, and has no dependence on any
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
202 data types being limited to 32-bits in length. If you have any
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
203 difficulties, please provide a complete problem report to zlib@gzip.org
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
204
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
205 27. Will zlib decompress data from the PKWare Data Compression Library?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
206
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
207 No. The PKWare DCL uses a completely different compressed data format than
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
208 does PKZIP and zlib. However, you can look in zlib's contrib/blast
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
209 directory for a possible solution to your problem.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
210
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
211 28. Can I access data randomly in a compressed stream?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
212
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
213 No, not without some preparation. If when compressing you periodically use
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
214 Z_FULL_FLUSH, carefully write all the pending data at those points, and
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
215 keep an index of those locations, then you can start decompression at those
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
216 points. You have to be careful to not use Z_FULL_FLUSH too often, since it
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
217 can significantly degrade compression. Alternatively, you can scan a
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
218 deflate stream once to generate an index, and then use that index for
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
219 random access. See examples/zran.c .
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
220
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
221 29. Does zlib work on MVS, OS/390, CICS, etc.?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
222
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
223 It has in the past, but we have not heard of any recent evidence. There
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
224 were working ports of zlib 1.1.4 to MVS, but those links no longer work.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
225 If you know of recent, successful applications of zlib on these operating
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
226 systems, please let us know. Thanks.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
227
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
228 30. Is there some simpler, easier to read version of inflate I can look at to
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
229 understand the deflate format?
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
230
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
231 First off, you should read RFC 1951. Second, yes. Look in zlib's
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
232 contrib/puff directory.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
233
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
234 31. Does zlib infringe on any patents?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
235
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
236 As far as we know, no. In fact, that was originally the whole point behind
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
237 zlib. Look here for some more information:
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
238
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
239 http://www.gzip.org/#faq11
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
240
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
241 32. Can zlib work with greater than 4 GB of data?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
242
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
243 Yes. inflate() and deflate() will process any amount of data correctly.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
244 Each call of inflate() or deflate() is limited to input and output chunks
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
245 of the maximum value that can be stored in the compiler's "unsigned int"
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
246 type, but there is no limit to the number of chunks. Note however that the
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
247 strm.total_in and strm_total_out counters may be limited to 4 GB. These
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
248 counters are provided as a convenience and are not used internally by
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
249 inflate() or deflate(). The application can easily set up its own counters
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
250 updated after each call of inflate() or deflate() to count beyond 4 GB.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
251 compress() and uncompress() may be limited to 4 GB, since they operate in a
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
252 single call. gzseek() and gztell() may be limited to 4 GB depending on how
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
253 zlib is compiled. See the zlibCompileFlags() function in zlib.h.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
254
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
255 The word "may" appears several times above since there is a 4 GB limit only
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
256 if the compiler's "long" type is 32 bits. If the compiler's "long" type is
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
257 64 bits, then the limit is 16 exabytes.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
258
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
259 33. Does zlib have any security vulnerabilities?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
260
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
261 The only one that we are aware of is potentially in gzprintf(). If zlib is
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
262 compiled to use sprintf() or vsprintf(), then there is no protection
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
263 against a buffer overflow of an 8K string space (or other value as set by
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
264 gzbuffer()), other than the caller of gzprintf() assuring that the output
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
265 will not exceed 8K. On the other hand, if zlib is compiled to use
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
266 snprintf() or vsnprintf(), which should normally be the case, then there is
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
267 no vulnerability. The ./configure script will display warnings if an
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
268 insecure variation of sprintf() will be used by gzprintf(). Also the
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
269 zlibCompileFlags() function will return information on what variant of
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
270 sprintf() is used by gzprintf().
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
271
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
272 If you don't have snprintf() or vsnprintf() and would like one, you can
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
273 find a portable implementation here:
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
274
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
275 http://www.ijs.si/software/snprintf/
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
276
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
277 Note that you should be using the most recent version of zlib. Versions
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
278 1.1.3 and before were subject to a double-free vulnerability, and versions
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
279 1.2.1 and 1.2.2 were subject to an access exception when decompressing
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
280 invalid compressed data.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
281
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
282 34. Is there a Java version of zlib?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
283
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
284 Probably what you want is to use zlib in Java. zlib is already included
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
285 as part of the Java SDK in the java.util.zip package. If you really want
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
286 a version of zlib written in the Java language, look on the zlib home
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
287 page for links: http://zlib.net/ .
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
288
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
289 35. I get this or that compiler or source-code scanner warning when I crank it
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
290 up to maximally-pedantic. Can't you guys write proper code?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
291
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
292 Many years ago, we gave up attempting to avoid warnings on every compiler
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
293 in the universe. It just got to be a waste of time, and some compilers
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
294 were downright silly as well as contradicted each other. So now, we simply
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
295 make sure that the code always works.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
296
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
297 36. Valgrind (or some similar memory access checker) says that deflate is
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
298 performing a conditional jump that depends on an uninitialized value.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
299 Isn't that a bug?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
300
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
301 No. That is intentional for performance reasons, and the output of deflate
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
302 is not affected. This only started showing up recently since zlib 1.2.x
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
303 uses malloc() by default for allocations, whereas earlier versions used
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
304 calloc(), which zeros out the allocated memory. Even though the code was
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
305 correct, versions 1.2.4 and later was changed to not stimulate these
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
306 checkers.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
307
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
308 37. Will zlib read the (insert any ancient or arcane format here) compressed
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
309 data format?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
310
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
311 Probably not. Look in the comp.compression FAQ for pointers to various
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
312 formats and associated software.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
313
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
314 38. How can I encrypt/decrypt zip files with zlib?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
315
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
316 zlib doesn't support encryption. The original PKZIP encryption is very
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
317 weak and can be broken with freely available programs. To get strong
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
318 encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
319 compression. For PKZIP compatible "encryption", look at
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
320 http://www.info-zip.org/
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
321
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
322 39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
323
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
324 "gzip" is the gzip format, and "deflate" is the zlib format. They should
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
325 probably have called the second one "zlib" instead to avoid confusion with
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
326 the raw deflate compressed data format. While the HTTP 1.1 RFC 2616
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
327 correctly points to the zlib specification in RFC 1950 for the "deflate"
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
328 transfer encoding, there have been reports of servers and browsers that
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
329 incorrectly produce or expect raw deflate data per the deflate
86546
224aa49f22f1 Issue #18527: Upgrade internal copy of zlib to 1.2.8
Christian Heimes <christian@cheimes.de>
parents: 63336
diff changeset
330 specification in RFC 1951, most notably Microsoft. So even though the
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
331 "deflate" transfer encoding using the zlib format would be the more
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
332 efficient approach (and in fact exactly what the zlib format was designed
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
333 for), using the "gzip" transfer encoding is probably more reliable due to
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
334 an unfortunate choice of name on the part of the HTTP 1.1 authors.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
335
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
336 Bottom line: use the gzip format for HTTP 1.1 encoding.
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
337
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
338 40. Does zlib support the new "Deflate64" format introduced by PKWare?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
339
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
340 No. PKWare has apparently decided to keep that format proprietary, since
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
341 they have not documented it as they have previous compression formats. In
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
342 any case, the compression improvements are so modest compared to other more
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
343 modern approaches, that it's not worth the effort to implement.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
344
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
345 41. I'm having a problem with the zip functions in zlib, can you help?
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
346
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
347 There are no zip functions in zlib. You are probably using minizip by
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
348 Giles Vollant, which is found in the contrib directory of zlib. It is not
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
349 part of zlib. In fact none of the stuff in contrib is part of zlib. The
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
350 files in there are not supported by the zlib authors. You need to contact
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
351 the authors of the respective contribution for help.
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
352
63336
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
353 42. The match.asm code in contrib is under the GNU General Public License.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
354 Since it's part of zlib, doesn't that mean that all of zlib falls under the
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
355 GNU GPL?
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
356
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
357 No. The files in contrib are not part of zlib. They were contributed by
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
358 other authors and are provided as a convenience to the user within the zlib
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
359 distribution. Each item in contrib has its own license.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
360
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
361 43. Is zlib subject to export controls? What is its ECCN?
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
362
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
363 zlib is not subject to export controls, and so is classified as EAR99.
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
364
467019588fcc Import files from zlib 1.2.5.
Martin v. Löwis <martin@v.loewis.de>
parents: 36186
diff changeset
365 44. Can you please sign these lengthy legal documents and fax them back to us
36186
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
366 so that we can use your software in our product?
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
367
81fa47d2d477 Import zlib into Python tree.
Martin v. Löwis <martin@v.loewis.de>
parents:
diff changeset
368 No. Go away. Shoo.