Mercurial > cpython-lru_cache-weakref
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 |
| 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. |
