Mercurial > cpython-lru_cache-weakref
annotate Modules/zlibmodule.c @ 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 | b67b19859fb1 |
| children |
| rev | line source |
|---|---|
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /* zlibmodule.c -- gzip-compatible data compression */ |
|
20327
54f05b9b1fc4
Update URL. Fixes bug #468118.
Martin v. Löwis <martin@v.loewis.de>
parents:
19810
diff
changeset
|
2 /* See http://www.gzip.org/zlib/ */ |
|
16368
c696a52c2621
Fix [ Bug #129293 ] zlib library used for binary win32 distribution can crash
Mark Hammond <mhammond@skippinet.com.au>
parents:
15098
diff
changeset
|
3 |
|
16369
c04ca6cba1e3
Docs for new Windows zlib build procedure.
Tim Peters <tim.peters@gmail.com>
parents:
16368
diff
changeset
|
4 /* Windows users: read Python's PCbuild\readme.txt */ |
|
16368
c696a52c2621
Fix [ Bug #129293 ] zlib library used for binary win32 distribution can crash
Mark Hammond <mhammond@skippinet.com.au>
parents:
15098
diff
changeset
|
5 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
7 #include "Python.h" |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
8 #include "structmember.h" |
|
5723
beee351f1f72
Small changes (casts etc.) by Jack, for Mac compilation.
Guido van Rossum <guido@python.org>
parents:
5722
diff
changeset
|
9 #include "zlib.h" |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
11 |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
12 #ifdef WITH_THREAD |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
13 #include "pythread.h" |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
14 #define ENTER_ZLIB(obj) \ |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
15 Py_BEGIN_ALLOW_THREADS; \ |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
16 PyThread_acquire_lock((obj)->lock, 1); \ |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
17 Py_END_ALLOW_THREADS; |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
18 #define LEAVE_ZLIB(obj) PyThread_release_lock((obj)->lock); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
19 #else |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
20 #define ENTER_ZLIB(obj) |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
21 #define LEAVE_ZLIB(obj) |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
22 #endif |
|
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
23 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 /* The following parameters are copied from zutil.h, version 0.95 */ |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 #define DEFLATED 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 #if MAX_MEM_LEVEL >= 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 # define DEF_MEM_LEVEL 8 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 #else |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 # define DEF_MEM_LEVEL MAX_MEM_LEVEL |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 #endif |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 #define DEF_WBITS MAX_WBITS |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 |
|
10538
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
33 /* The output buffer will be increased in chunks of DEFAULTALLOC bytes. */ |
|
ccee3c28b7ef
Patch by Andrew Kuchling to unflush() (flush() for deflating).
Guido van Rossum <guido@python.org>
parents:
10467
diff
changeset
|
34 #define DEFAULTALLOC (16*1024) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
36 static PyTypeObject Comptype; |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
37 static PyTypeObject Decomptype; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 static PyObject *ZlibError; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
41 typedef struct |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 { |
| 20469 | 43 PyObject_HEAD |
| 44 z_stream zst; | |
| 45 PyObject *unused_data; | |
| 46 PyObject *unconsumed_tail; | |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
47 char eof; |
| 20469 | 48 int is_initialised; |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
49 PyObject *zdict; |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
50 #ifdef WITH_THREAD |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
51 PyThread_type_lock lock; |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
52 #endif |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 } compobject; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 |
|
20474
a5a30ba2899f
Add zlib_error() helper.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20470
diff
changeset
|
55 static void |
|
a5a30ba2899f
Add zlib_error() helper.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20470
diff
changeset
|
56 zlib_error(z_stream zst, int err, char *msg) |
|
a5a30ba2899f
Add zlib_error() helper.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20470
diff
changeset
|
57 { |
|
72111
cc9e794bf94f
Issue #12839: Fix crash in zlib module due to version mismatch.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70119
diff
changeset
|
58 const char *zmsg = Z_NULL; |
|
cc9e794bf94f
Issue #12839: Fix crash in zlib module due to version mismatch.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70119
diff
changeset
|
59 /* In case of a version mismatch, zst.msg won't be initialized. |
|
cc9e794bf94f
Issue #12839: Fix crash in zlib module due to version mismatch.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70119
diff
changeset
|
60 Check for this case first, before looking at zst.msg. */ |
|
cc9e794bf94f
Issue #12839: Fix crash in zlib module due to version mismatch.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70119
diff
changeset
|
61 if (err == Z_VERSION_ERROR) |
|
cc9e794bf94f
Issue #12839: Fix crash in zlib module due to version mismatch.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70119
diff
changeset
|
62 zmsg = "library version mismatch"; |
|
cc9e794bf94f
Issue #12839: Fix crash in zlib module due to version mismatch.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70119
diff
changeset
|
63 if (zmsg == Z_NULL) |
|
cc9e794bf94f
Issue #12839: Fix crash in zlib module due to version mismatch.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70119
diff
changeset
|
64 zmsg = zst.msg; |
|
61523
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
65 if (zmsg == Z_NULL) { |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
66 switch (err) { |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
67 case Z_BUF_ERROR: |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
68 zmsg = "incomplete or truncated stream"; |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
69 break; |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
70 case Z_STREAM_ERROR: |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
71 zmsg = "inconsistent stream state"; |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
72 break; |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
73 case Z_DATA_ERROR: |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
74 zmsg = "invalid input data"; |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
75 break; |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
76 } |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
77 } |
|
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
78 if (zmsg == Z_NULL) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
79 PyErr_Format(ZlibError, "Error %d %s", err, msg); |
|
20474
a5a30ba2899f
Add zlib_error() helper.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20470
diff
changeset
|
80 else |
|
61523
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
81 PyErr_Format(ZlibError, "Error %d %s: %.200s", err, msg, zmsg); |
|
20474
a5a30ba2899f
Add zlib_error() helper.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20470
diff
changeset
|
82 } |
|
a5a30ba2899f
Add zlib_error() helper.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20470
diff
changeset
|
83 |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
84 /*[clinic] |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
85 module zlib |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
86 class zlib.Compress |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
87 class zlib.Decompress |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
88 [clinic]*/ |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
89 /*[clinic checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/ |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
90 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
91 PyDoc_STRVAR(compressobj__doc__, |
|
77559
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
92 "compressobj(level=-1, method=DEFLATED, wbits=15, memlevel=8,\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
93 " strategy=Z_DEFAULT_STRATEGY[, zdict])\n" |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
94 " -- Return a compressor object.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
95 "\n" |
|
77559
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
96 "level is the compression level (an integer in the range 0-9; default is 6).\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
97 "Higher compression levels are slower, but produce smaller results.\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
98 "\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
99 "method is the compression algorithm. If given, this must be DEFLATED.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
100 "\n" |
|
77559
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
101 "wbits is the base two logarithm of the window size (range: 8..15).\n" |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
102 "\n" |
|
77559
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
103 "memlevel controls the amount of memory used for internal compression state.\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
104 "Valid values range from 1 to 9. Higher values result in higher memory usage,\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
105 "faster compression, and smaller output.\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
106 "\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
107 "strategy is used to tune the compression algorithm. Possible values are\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
108 "Z_DEFAULT_STRATEGY, Z_FILTERED, and Z_HUFFMAN_ONLY.\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
109 "\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
110 "zdict is the predefined compression dictionary - a sequence of bytes\n" |
|
1cfa44cb5af0
Document the rest of zlib.compressobj()'s arguments.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77558
diff
changeset
|
111 "containing subsequences that are likely to occur in the input data."); |
| 5722 | 112 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
113 PyDoc_STRVAR(decompressobj__doc__, |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
114 "decompressobj([wbits[, zdict]]) -- Return a decompressor object.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
115 "\n" |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
116 "Optional arg wbits is the window buffer size.\n" |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
117 "\n" |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
118 "Optional arg zdict is the predefined compression dictionary. This must be\n" |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
119 "the same dictionary as used by the compressor that produced the input data."); |
| 5722 | 120 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
121 static compobject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
122 newcompobject(PyTypeObject *type) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 { |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
124 compobject *self; |
| 20469 | 125 self = PyObject_New(compobject, type); |
| 126 if (self == NULL) | |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
127 return NULL; |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
128 self->eof = 0; |
| 20469 | 129 self->is_initialised = 0; |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
130 self->zdict = NULL; |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
131 self->unused_data = PyBytes_FromStringAndSize("", 0); |
| 20469 | 132 if (self->unused_data == NULL) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
133 Py_DECREF(self); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
134 return NULL; |
| 20469 | 135 } |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
136 self->unconsumed_tail = PyBytes_FromStringAndSize("", 0); |
| 20469 | 137 if (self->unconsumed_tail == NULL) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
138 Py_DECREF(self); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
139 return NULL; |
| 20469 | 140 } |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
141 #ifdef WITH_THREAD |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
142 self->lock = PyThread_allocate_lock(); |
|
84518
2ef2edfd1a4c
Issue #18408: Fix zlib.compressobj() to handle PyThread_allocate_lock() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84496
diff
changeset
|
143 if (self->lock == NULL) { |
|
2ef2edfd1a4c
Issue #18408: Fix zlib.compressobj() to handle PyThread_allocate_lock() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84496
diff
changeset
|
144 PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock"); |
|
2ef2edfd1a4c
Issue #18408: Fix zlib.compressobj() to handle PyThread_allocate_lock() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84496
diff
changeset
|
145 return NULL; |
|
2ef2edfd1a4c
Issue #18408: Fix zlib.compressobj() to handle PyThread_allocate_lock() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84496
diff
changeset
|
146 } |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
147 #endif |
| 20469 | 148 return self; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 |
|
84494
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
151 static void* |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
152 PyZlib_Malloc(voidpf ctx, uInt items, uInt size) |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
153 { |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
154 if (items > (size_t)PY_SSIZE_T_MAX / size) |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
155 return NULL; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
156 /* PyMem_Malloc() cannot be used: the GIL is not held when |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
157 inflate() and deflate() are called */ |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
158 return PyMem_RawMalloc(items * size); |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
159 } |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
160 |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
161 static void |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
162 PyZlib_Free(voidpf ctx, void *ptr) |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
163 { |
|
84496
12f26c356611
Issue #18227: "Free" function of bz2, lzma and zlib modules has no return value (void)
Victor Stinner <victor.stinner@gmail.com>
parents:
84494
diff
changeset
|
164 PyMem_RawFree(ptr); |
|
84494
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
165 } |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
166 |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
167 /*[clinic] |
|
87470
78ec18f5cb45
Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents:
87466
diff
changeset
|
168 |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
169 zlib.compress |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
170 bytes: Py_buffer |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
171 Binary data to be compressed. |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
172 [ |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
173 level: int |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
174 Compression level, in 0-9. |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
175 ] |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
176 / |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
177 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
178 Returns compressed string. |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
179 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
180 [clinic]*/ |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
181 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
182 PyDoc_STRVAR(zlib_compress__doc__, |
|
87470
78ec18f5cb45
Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents:
87466
diff
changeset
|
183 "compress(bytes, [level])\n" |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
184 "Returns compressed string.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
185 "\n" |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
186 " bytes\n" |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
187 " Binary data to be compressed.\n" |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
188 " level\n" |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
189 " Compression level, in 0-9."); |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
190 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
191 #define ZLIB_COMPRESS_METHODDEF \ |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
192 {"compress", (PyCFunction)zlib_compress, METH_VARARGS, zlib_compress__doc__}, |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
193 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
194 static PyObject * |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
195 zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int group_right_1, int level); |
| 5722 | 196 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 static PyObject * |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
198 zlib_compress(PyModuleDef *module, PyObject *args) |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
199 { |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
200 PyObject *return_value = NULL; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
201 Py_buffer bytes; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
202 int group_right_1 = 0; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
203 int level = 0; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
204 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
205 switch (PyTuple_Size(args)) { |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
206 case 1: |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
207 if (!PyArg_ParseTuple(args, "y*:compress", &bytes)) |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
208 return NULL; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
209 break; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
210 case 2: |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
211 if (!PyArg_ParseTuple(args, "y*i:compress", &bytes, &level)) |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
212 return NULL; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
213 group_right_1 = 1; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
214 break; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
215 default: |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
216 PyErr_SetString(PyExc_TypeError, "zlib.compress requires 1 to 2 arguments"); |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
217 return NULL; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
218 } |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
219 return_value = zlib_compress_impl(module, &bytes, group_right_1, level); |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
220 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
221 /* Cleanup for bytes */ |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
222 if (bytes.buf) |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
223 PyBuffer_Release(&bytes); |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
224 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
225 return return_value; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
226 } |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
227 |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
228 static PyObject * |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
229 zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int group_right_1, int level) |
|
87470
78ec18f5cb45
Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents:
87466
diff
changeset
|
230 /*[clinic checksum: f490708eff84be652b5ebe7fe622ab73ac12c888]*/ |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
231 { |
| 20469 | 232 PyObject *ReturnVal = NULL; |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
233 Byte *input, *output = NULL; |
|
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
234 unsigned int length; |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
235 int err; |
| 20469 | 236 z_stream zst; |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
237 |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
238 if (!group_right_1) |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
239 level = Z_DEFAULT_COMPRESSION; |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
240 |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
241 if ((size_t)bytes->len > UINT_MAX) { |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
242 PyErr_SetString(PyExc_OverflowError, |
|
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
243 "Size does not fit in an unsigned int"); |
|
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
244 goto error; |
|
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
245 } |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
246 input = bytes->buf; |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
247 length = (unsigned int)bytes->len; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
248 |
| 20469 | 249 zst.avail_out = length + length/1000 + 12 + 1; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
250 |
|
84491
41ef797e6639
Issue #18203: Replace malloc() with PyMem_Malloc() in Python modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84320
diff
changeset
|
251 output = (Byte*)PyMem_Malloc(zst.avail_out); |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
252 if (output == NULL) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
253 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
254 "Can't allocate memory to compress data"); |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
255 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
256 } |
| 9657 | 257 |
| 20469 | 258 /* Past the point of no return. From here on out, we need to make sure |
| 259 we clean up mallocs & INCREFs. */ | |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
260 |
|
84494
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
261 zst.opaque = NULL; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
262 zst.zalloc = PyZlib_Malloc; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
263 zst.zfree = PyZlib_Free; |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
264 zst.next_out = (Byte *)output; |
|
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
265 zst.next_in = (Byte *)input; |
|
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
266 zst.avail_in = length; |
|
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
267 err = deflateInit(&zst, level); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
268 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
269 switch(err) { |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
270 case(Z_OK): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
271 break; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 case(Z_MEM_ERROR): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
273 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
274 "Out of memory while compressing data"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
275 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
276 case(Z_STREAM_ERROR): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
277 PyErr_SetString(ZlibError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
278 "Bad compression level"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
279 goto error; |
|
20474
a5a30ba2899f
Add zlib_error() helper.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20470
diff
changeset
|
280 default: |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 deflateEnd(&zst); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
282 zlib_error(zst, err, "while compressing data"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
283 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
284 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
285 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
286 Py_BEGIN_ALLOW_THREADS; |
|
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
287 err = deflate(&zst, Z_FINISH); |
|
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
288 Py_END_ALLOW_THREADS; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
289 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
290 if (err != Z_STREAM_END) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
291 zlib_error(zst, err, "while compressing data"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
292 deflateEnd(&zst); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
293 goto error; |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
294 } |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
295 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
296 err=deflateEnd(&zst); |
|
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
297 if (err == Z_OK) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
298 ReturnVal = PyBytes_FromStringAndSize((char *)output, |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
299 zst.total_out); |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
300 else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
301 zlib_error(zst, err, "while finishing compression"); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
302 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
303 error: |
|
84491
41ef797e6639
Issue #18203: Replace malloc() with PyMem_Malloc() in Python modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84320
diff
changeset
|
304 PyMem_Free(output); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
305 |
| 20469 | 306 return ReturnVal; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
307 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
309 /*[python] |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
310 |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
311 class uint_converter(CConverter): |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
312 type = 'unsigned int' |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
313 converter = 'uint_converter' |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
314 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
315 class compobject_converter(self_converter): |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
316 type = "compobject *" |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
317 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
318 [python]*/ |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
319 /*[python checksum: da39a3ee5e6b4b0d3255bfef95601890afd80709]*/ |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
320 |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
321 static int |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
322 uint_converter(PyObject *obj, void *ptr) |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
323 { |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
324 long val; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
325 unsigned long uval; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
326 |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
327 val = PyLong_AsLong(obj); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
328 if (val == -1 && PyErr_Occurred()) { |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
329 uval = PyLong_AsUnsignedLong(obj); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
330 if (uval == (unsigned long)-1 && PyErr_Occurred()) |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
331 return 0; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
332 if (uval > UINT_MAX) { |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
333 PyErr_SetString(PyExc_OverflowError, |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
334 "Python int too large for C unsigned int"); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
335 return 0; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
336 } |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
337 } |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
338 else { |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
339 if (val < 0) { |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
340 PyErr_SetString(PyExc_ValueError, |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
341 "value must be positive"); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
342 return 0; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
343 } |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
344 uval = (unsigned long)val; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
345 } |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
346 |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
347 *(unsigned int *)ptr = Py_SAFE_DOWNCAST(uval, unsigned long, unsigned int); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
348 return 1; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
349 } |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
350 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
351 PyDoc_STRVAR(decompress__doc__, |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
352 "decompress(string[, wbits[, bufsize]]) -- Return decompressed string.\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
353 "\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
354 "Optional arg wbits is the window buffer size. Optional arg bufsize is\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
355 "the initial output buffer size."); |
| 5722 | 356 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
357 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
358 PyZlib_decompress(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
359 { |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
360 PyObject *result_str = NULL; |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
361 Py_buffer pinput; |
| 20469 | 362 Byte *input; |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
363 unsigned int length; |
|
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
364 int err; |
|
43957
23befe540d0d
Merged revisions 59077-59104 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42750
diff
changeset
|
365 int wsize=DEF_WBITS; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
366 unsigned int bufsize = DEFAULTALLOC, new_bufsize; |
| 20469 | 367 z_stream zst; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
368 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
369 if (!PyArg_ParseTuple(args, "y*|iO&:decompress", |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
370 &pinput, &wsize, uint_converter, &bufsize)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
371 return NULL; |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
372 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
373 if ((size_t)pinput.len > UINT_MAX) { |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
374 PyErr_SetString(PyExc_OverflowError, |
|
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
375 "Size does not fit in an unsigned int"); |
|
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
376 goto error; |
|
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
377 } |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
378 input = pinput.buf; |
|
80066
96fc87997ce9
Issue #9566: Explicit downcast to fix compiler warnings on Win64
Victor Stinner <victor.stinner@gmail.com>
parents:
77559
diff
changeset
|
379 length = (unsigned int)pinput.len; |
| 6236 | 380 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
381 if (bufsize == 0) |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
382 bufsize = 1; |
| 9657 | 383 |
| 20469 | 384 zst.avail_in = length; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
385 zst.avail_out = bufsize; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
386 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
387 if (!(result_str = PyBytes_FromStringAndSize(NULL, bufsize))) |
|
70103
850624632e9a
Issue #8650: Backport 64-bit safety fixes for compress() and decompress().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70099
diff
changeset
|
388 goto error; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
389 |
|
84494
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
390 zst.opaque = NULL; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
391 zst.zalloc = PyZlib_Malloc; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
392 zst.zfree = PyZlib_Free; |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
393 zst.next_out = (Byte *)PyBytes_AS_STRING(result_str); |
| 20469 | 394 zst.next_in = (Byte *)input; |
| 395 err = inflateInit2(&zst, wsize); | |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
396 |
| 20469 | 397 switch(err) { |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
398 case(Z_OK): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
399 break; |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
400 case(Z_MEM_ERROR): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
401 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
402 "Out of memory while decompressing data"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
403 goto error; |
|
20474
a5a30ba2899f
Add zlib_error() helper.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20470
diff
changeset
|
404 default: |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
405 inflateEnd(&zst); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
406 zlib_error(zst, err, "while preparing to decompress data"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
407 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
408 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
409 |
| 20469 | 410 do { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
411 Py_BEGIN_ALLOW_THREADS |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
412 err=inflate(&zst, Z_FINISH); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
413 Py_END_ALLOW_THREADS |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
414 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
415 switch(err) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
416 case(Z_STREAM_END): |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
417 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
418 case(Z_BUF_ERROR): |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
419 /* |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
420 * If there is at least 1 byte of room according to zst.avail_out |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
421 * and we get this error, assume that it means zlib cannot |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
422 * process the inflate call() due to an error in the data. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
423 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
424 if (zst.avail_out > 0) { |
|
61523
48d9664c47a3
Merged revisions 81098 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61466
diff
changeset
|
425 zlib_error(zst, err, "while decompressing data"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
426 inflateEnd(&zst); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
427 goto error; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
428 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
429 /* fall through */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
430 case(Z_OK): |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
431 /* need more memory */ |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
432 if (bufsize <= (UINT_MAX >> 1)) |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
433 new_bufsize = bufsize << 1; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
434 else |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
435 new_bufsize = UINT_MAX; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
436 if (_PyBytes_Resize(&result_str, new_bufsize) < 0) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
437 inflateEnd(&zst); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
438 goto error; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
439 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
440 zst.next_out = |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
441 (unsigned char *)PyBytes_AS_STRING(result_str) + bufsize; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
442 zst.avail_out = bufsize; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
443 bufsize = new_bufsize; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
444 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
445 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
446 inflateEnd(&zst); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
447 zlib_error(zst, err, "while decompressing data"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
448 goto error; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
449 } |
| 20469 | 450 } while (err != Z_STREAM_END); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
451 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
452 err = inflateEnd(&zst); |
|
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
453 if (err != Z_OK) { |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
454 zlib_error(zst, err, "while finishing decompression"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
455 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
456 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
457 |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
458 if (_PyBytes_Resize(&result_str, zst.total_out) < 0) |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
459 goto error; |
|
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
460 |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
461 PyBuffer_Release(&pinput); |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
462 return result_str; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
463 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
464 error: |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
465 PyBuffer_Release(&pinput); |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
466 Py_XDECREF(result_str); |
|
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
467 return NULL; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
468 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
469 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
470 static PyObject * |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
471 PyZlib_compressobj(PyObject *selfptr, PyObject *args, PyObject *kwargs) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
472 { |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
473 compobject *self = NULL; |
| 20475 | 474 int level=Z_DEFAULT_COMPRESSION, method=DEFLATED; |
| 475 int wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL, strategy=0, err; | |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
476 Py_buffer zdict; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
477 static char *kwlist[] = {"level", "method", "wbits", |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
478 "memLevel", "strategy", "zdict", NULL}; |
| 6007 | 479 |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
480 zdict.buf = NULL; /* Sentinel, so we can tell whether zdict was supplied. */ |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
481 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iiiiiy*:compressobj", |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
482 kwlist, &level, &method, &wbits, |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
483 &memLevel, &strategy, &zdict)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
484 return NULL; |
| 6007 | 485 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
486 if (zdict.buf != NULL && (size_t)zdict.len > UINT_MAX) { |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
487 PyErr_SetString(PyExc_OverflowError, |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
488 "zdict length does not fit in an unsigned int"); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
489 goto error; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
490 } |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
491 |
| 20475 | 492 self = newcompobject(&Comptype); |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
493 if (self==NULL) |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
494 goto error; |
|
84494
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
495 self->zst.opaque = NULL; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
496 self->zst.zalloc = PyZlib_Malloc; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
497 self->zst.zfree = PyZlib_Free; |
|
34264
b2ecda4dd70f
[Bug #1083110] calling .flush() on decompress objects causes a segfault due to an uninitialized pointer: fixes the problem and adds a test case
Andrew M. Kuchling <amk@amk.ca>
parents:
27653
diff
changeset
|
498 self->zst.next_in = NULL; |
|
b2ecda4dd70f
[Bug #1083110] calling .flush() on decompress objects causes a segfault due to an uninitialized pointer: fixes the problem and adds a test case
Andrew M. Kuchling <amk@amk.ca>
parents:
27653
diff
changeset
|
499 self->zst.avail_in = 0; |
| 20475 | 500 err = deflateInit2(&self->zst, level, method, wbits, memLevel, strategy); |
| 501 switch(err) { | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
502 case (Z_OK): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
503 self->is_initialised = 1; |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
504 if (zdict.buf == NULL) { |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
505 goto success; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
506 } else { |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
507 err = deflateSetDictionary(&self->zst, |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
508 zdict.buf, (unsigned int)zdict.len); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
509 switch (err) { |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
510 case (Z_OK): |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
511 goto success; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
512 case (Z_STREAM_ERROR): |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
513 PyErr_SetString(PyExc_ValueError, "Invalid dictionary"); |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
514 goto error; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
515 default: |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
516 PyErr_SetString(PyExc_ValueError, "deflateSetDictionary()"); |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
517 goto error; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
518 } |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
519 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
520 case (Z_MEM_ERROR): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
521 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
522 "Can't allocate memory for compression object"); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
523 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
524 case(Z_STREAM_ERROR): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
525 PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
526 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
527 default: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
528 zlib_error(self->zst, err, "while creating compression object"); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
529 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
530 } |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
531 |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
532 error: |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
533 Py_XDECREF(self); |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
534 self = NULL; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
535 success: |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
536 if (zdict.buf != NULL) |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
537 PyBuffer_Release(&zdict); |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
538 return (PyObject*)self; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
539 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
540 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
541 static PyObject * |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
542 PyZlib_decompressobj(PyObject *selfptr, PyObject *args, PyObject *kwargs) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
543 { |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
544 static char *kwlist[] = {"wbits", "zdict", NULL}; |
| 20475 | 545 int wbits=DEF_WBITS, err; |
| 546 compobject *self; | |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
547 PyObject *zdict=NULL; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
548 |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
549 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iO:decompressobj", |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
550 kwlist, &wbits, &zdict)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
551 return NULL; |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
552 if (zdict != NULL && !PyObject_CheckBuffer(zdict)) { |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
553 PyErr_SetString(PyExc_TypeError, |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
554 "zdict argument must support the buffer protocol"); |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
555 return NULL; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
556 } |
| 20475 | 557 |
| 558 self = newcompobject(&Decomptype); | |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
559 if (self == NULL) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
560 return(NULL); |
|
84494
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
561 self->zst.opaque = NULL; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
562 self->zst.zalloc = PyZlib_Malloc; |
|
a876d9d2e4fc
Issue #18227: Use PyMem_RawAlloc() in bz2, lzma and zlib modules
Victor Stinner <victor.stinner@gmail.com>
parents:
84491
diff
changeset
|
563 self->zst.zfree = PyZlib_Free; |
|
34264
b2ecda4dd70f
[Bug #1083110] calling .flush() on decompress objects causes a segfault due to an uninitialized pointer: fixes the problem and adds a test case
Andrew M. Kuchling <amk@amk.ca>
parents:
27653
diff
changeset
|
564 self->zst.next_in = NULL; |
|
b2ecda4dd70f
[Bug #1083110] calling .flush() on decompress objects causes a segfault due to an uninitialized pointer: fixes the problem and adds a test case
Andrew M. Kuchling <amk@amk.ca>
parents:
27653
diff
changeset
|
565 self->zst.avail_in = 0; |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
566 if (zdict != NULL) { |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
567 Py_INCREF(zdict); |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
568 self->zdict = zdict; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
569 } |
| 20475 | 570 err = inflateInit2(&self->zst, wbits); |
| 571 switch(err) { | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
572 case (Z_OK): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
573 self->is_initialised = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
574 return (PyObject*)self; |
| 6236 | 575 case(Z_STREAM_ERROR): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
576 Py_DECREF(self); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
577 PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
578 return NULL; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
579 case (Z_MEM_ERROR): |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
580 Py_DECREF(self); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
581 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
582 "Can't allocate memory for decompression object"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
583 return NULL; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
584 default: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
585 zlib_error(self->zst, err, "while creating decompression object"); |
|
10028
167adf31786d
Added missing DECREF's in the error branches when creating a compressor or
Andrew M. Kuchling <amk@amk.ca>
parents:
9995
diff
changeset
|
586 Py_DECREF(self); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
587 return NULL; |
| 20475 | 588 } |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
589 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
590 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
591 static void |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
592 Dealloc(compobject *self) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
593 { |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
594 #ifdef WITH_THREAD |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
595 PyThread_free_lock(self->lock); |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
596 #endif |
|
10467
255abab3c574
Add an .unused_data attribute to decompressor objects. If .unused_data
Andrew M. Kuchling <amk@amk.ca>
parents:
10440
diff
changeset
|
597 Py_XDECREF(self->unused_data); |
|
20466
60e12f83d2d2
[ #403753 ] zlib decompress; uncontrollable memory usage
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20327
diff
changeset
|
598 Py_XDECREF(self->unconsumed_tail); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
599 Py_XDECREF(self->zdict); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12255
diff
changeset
|
600 PyObject_Del(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
601 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
602 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
603 static void |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
604 Comp_dealloc(compobject *self) |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
605 { |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
606 if (self->is_initialised) |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
607 deflateEnd(&self->zst); |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
608 Dealloc(self); |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
609 } |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
610 |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
611 static void |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
612 Decomp_dealloc(compobject *self) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
613 { |
|
16718
01c2470eeb2e
Patch #103373 from Donovan Baarda: This patch:
Andrew M. Kuchling <amk@amk.ca>
parents:
16369
diff
changeset
|
614 if (self->is_initialised) |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
615 inflateEnd(&self->zst); |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
616 Dealloc(self); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
617 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
618 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
619 PyDoc_STRVAR(comp_compress__doc__, |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
620 "compress(data) -- Return a string containing data compressed.\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
621 "\n" |
| 5722 | 622 "After calling this function, some of the input data may still\n" |
| 623 "be stored in internal buffers for later processing.\n" | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
624 "Call the flush() method to clear these buffers."); |
| 5722 | 625 |
| 626 | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
627 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
628 PyZlib_objcompress(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
629 { |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
630 int err; |
|
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
631 unsigned int inplen; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
632 unsigned int length = DEFAULTALLOC, new_length; |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
633 PyObject *RetVal = NULL; |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
634 Py_buffer pinput; |
| 20469 | 635 Byte *input; |
| 636 unsigned long start_total_out; | |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
637 |
|
57736
919e2142726e
Merged revisions 76836 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51270
diff
changeset
|
638 if (!PyArg_ParseTuple(args, "y*:compress", &pinput)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
639 return NULL; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
640 if ((size_t)pinput.len > UINT_MAX) { |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
641 PyErr_SetString(PyExc_OverflowError, |
|
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
642 "Size does not fit in an unsigned int"); |
|
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
643 goto error_outer; |
|
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
644 } |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
645 input = pinput.buf; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
646 inplen = (unsigned int)pinput.len; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
647 |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
648 if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) |
|
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
649 goto error_outer; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
650 |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
651 ENTER_ZLIB(self); |
| 20469 | 652 |
| 653 start_total_out = self->zst.total_out; | |
| 654 self->zst.avail_in = inplen; | |
| 655 self->zst.next_in = input; | |
|
16718
01c2470eeb2e
Patch #103373 from Donovan Baarda: This patch:
Andrew M. Kuchling <amk@amk.ca>
parents:
16369
diff
changeset
|
656 self->zst.avail_out = length; |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
657 self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); |
| 20469 | 658 |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
659 Py_BEGIN_ALLOW_THREADS |
|
16718
01c2470eeb2e
Patch #103373 from Donovan Baarda: This patch:
Andrew M. Kuchling <amk@amk.ca>
parents:
16369
diff
changeset
|
660 err = deflate(&(self->zst), Z_NO_FLUSH); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
661 Py_END_ALLOW_THREADS |
|
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
662 |
| 20469 | 663 /* while Z_OK and the output buffer is full, there might be more output, |
| 664 so extend the output buffer and try again */ | |
| 665 while (err == Z_OK && self->zst.avail_out == 0) { | |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
666 if (length <= (UINT_MAX >> 1)) |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
667 new_length = length << 1; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
668 else |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
669 new_length = UINT_MAX; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
670 if (_PyBytes_Resize(&RetVal, new_length) < 0) { |
|
84520
ed0c9d77e179
Issue #18408: Fix usage of _PyBytes_Resize()
Victor Stinner <victor.stinner@gmail.com>
parents:
84518
diff
changeset
|
671 Py_CLEAR(RetVal); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
672 goto error; |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
673 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
674 self->zst.next_out = |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
675 (unsigned char *)PyBytes_AS_STRING(RetVal) + length; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
676 self->zst.avail_out = length; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
677 length = new_length; |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
678 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
679 Py_BEGIN_ALLOW_THREADS |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
680 err = deflate(&(self->zst), Z_NO_FLUSH); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
681 Py_END_ALLOW_THREADS |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
682 } |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
683 /* We will only get Z_BUF_ERROR if the output buffer was full but |
| 20469 | 684 there wasn't more output when we tried again, so it is not an error |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
685 condition. |
|
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
686 */ |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
687 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
688 if (err != Z_OK && err != Z_BUF_ERROR) { |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
689 zlib_error(self->zst, err, "while compressing data"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
690 Py_DECREF(RetVal); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
691 RetVal = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
692 goto error; |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
693 } |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
694 if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { |
|
84520
ed0c9d77e179
Issue #18408: Fix usage of _PyBytes_Resize()
Victor Stinner <victor.stinner@gmail.com>
parents:
84518
diff
changeset
|
695 Py_CLEAR(RetVal); |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
696 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
697 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
698 error: |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
699 LEAVE_ZLIB(self); |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
700 error_outer: |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
701 PyBuffer_Release(&pinput); |
| 20469 | 702 return RetVal; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
703 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
704 |
|
80350
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
705 /* Helper for objdecompress() and unflush(). Saves any unconsumed input data in |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
706 self->unused_data or self->unconsumed_tail, as appropriate. */ |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
707 static int |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
708 save_unconsumed_input(compobject *self, int err) |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
709 { |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
710 if (err == Z_STREAM_END) { |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
711 /* The end of the compressed data has been reached. Store the leftover |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
712 input data in self->unused_data. */ |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
713 if (self->zst.avail_in > 0) { |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
714 Py_ssize_t old_size = PyBytes_GET_SIZE(self->unused_data); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
715 Py_ssize_t new_size; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
716 PyObject *new_data; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
717 if ((size_t)self->zst.avail_in > (size_t)UINT_MAX - (size_t)old_size) { |
|
80350
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
718 PyErr_NoMemory(); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
719 return -1; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
720 } |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
721 new_size = old_size + self->zst.avail_in; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
722 new_data = PyBytes_FromStringAndSize(NULL, new_size); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
723 if (new_data == NULL) |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
724 return -1; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
725 Py_MEMCPY(PyBytes_AS_STRING(new_data), |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
726 PyBytes_AS_STRING(self->unused_data), old_size); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
727 Py_MEMCPY(PyBytes_AS_STRING(new_data) + old_size, |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
728 self->zst.next_in, self->zst.avail_in); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
729 Py_DECREF(self->unused_data); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
730 self->unused_data = new_data; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
731 self->zst.avail_in = 0; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
732 } |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
733 } |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
734 if (self->zst.avail_in > 0 || PyBytes_GET_SIZE(self->unconsumed_tail)) { |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
735 /* This code handles two distinct cases: |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
736 1. Output limit was reached. Save leftover input in unconsumed_tail. |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
737 2. All input data was consumed. Clear unconsumed_tail. */ |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
738 PyObject *new_data = PyBytes_FromStringAndSize( |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
739 (char *)self->zst.next_in, self->zst.avail_in); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
740 if (new_data == NULL) |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
741 return -1; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
742 Py_DECREF(self->unconsumed_tail); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
743 self->unconsumed_tail = new_data; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
744 } |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
745 return 0; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
746 } |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
747 |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
748 /*[clinic] |
|
87470
78ec18f5cb45
Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents:
87466
diff
changeset
|
749 |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
750 zlib.Decompress.decompress |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
751 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
752 self: compobject |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
753 |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
754 data: Py_buffer |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
755 The binary data to decompress. |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
756 max_length: uint = 0 |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
757 The maximum allowable length of the decompressed data. |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
758 Unconsumed input data will be stored in |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
759 the unconsumed_tail attribute. |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
760 / |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
761 |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
762 Return a string containing the decompressed version of the data. |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
763 |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
764 After calling this function, some of the input data may still be stored in |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
765 internal buffers for later processing. |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
766 Call the flush() method to clear these buffers. |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
767 [clinic]*/ |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
768 |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
769 PyDoc_STRVAR(zlib_Decompress_decompress__doc__, |
|
87470
78ec18f5cb45
Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents:
87466
diff
changeset
|
770 "decompress(data, max_length=0)\n" |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
771 "Return a string containing the decompressed version of the data.\n" |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
772 "\n" |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
773 " data\n" |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
774 " The binary data to decompress.\n" |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
775 " max_length\n" |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
776 " The maximum allowable length of the decompressed data.\n" |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
777 " Unconsumed input data will be stored in\n" |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
778 " the unconsumed_tail attribute.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
779 "\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
780 "After calling this function, some of the input data may still be stored in\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
781 "internal buffers for later processing.\n" |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
782 "Call the flush() method to clear these buffers."); |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
783 |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
784 #define ZLIB_DECOMPRESS_DECOMPRESS_METHODDEF \ |
|
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
785 {"decompress", (PyCFunction)zlib_Decompress_decompress, METH_VARARGS, zlib_Decompress_decompress__doc__}, |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
786 |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
787 static PyObject * |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
788 zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, unsigned int max_length); |
| 5722 | 789 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
790 static PyObject * |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
791 zlib_Decompress_decompress(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
792 { |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
793 PyObject *return_value = NULL; |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
794 Py_buffer data; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
795 unsigned int max_length = 0; |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
796 |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
797 if (!PyArg_ParseTuple(args, |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
798 "y*|O&:decompress", |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
799 &data, uint_converter, &max_length)) |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
800 goto exit; |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
801 return_value = zlib_Decompress_decompress_impl((compobject *)self, &data, max_length); |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
802 |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
803 exit: |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
804 /* Cleanup for data */ |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
805 if (data.buf) |
|
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
806 PyBuffer_Release(&data); |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
807 |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
808 return return_value; |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
809 } |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
810 |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
811 static PyObject * |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
812 zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, unsigned int max_length) |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
813 /*[clinic checksum: 3599698948f5a712f5a8309491671cc2ce969d2c]*/ |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
814 { |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
815 int err; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
816 unsigned int old_length, length = DEFAULTALLOC; |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
817 PyObject *RetVal = NULL; |
| 20469 | 818 unsigned long start_total_out; |
|
20466
60e12f83d2d2
[ #403753 ] zlib decompress; uncontrollable memory usage
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20327
diff
changeset
|
819 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
820 if ((size_t)data->len > UINT_MAX) { |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
821 PyErr_SetString(PyExc_OverflowError, |
|
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
822 "Size does not fit in an unsigned int"); |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
823 return NULL; |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
824 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
825 |
| 20469 | 826 /* limit amount of data allocated to max_length */ |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
827 if (max_length && length > max_length) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
828 length = max_length; |
|
70118
0b5211d19a14
Issue #8650: Make zlib.[de]compressobj().[de]compress() 64-bit clean.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70103
diff
changeset
|
829 if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
830 return NULL; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
831 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
832 ENTER_ZLIB(self); |
| 20469 | 833 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
834 start_total_out = self->zst.total_out; |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
835 self->zst.avail_in = (unsigned int)data->len; |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
836 self->zst.next_in = data->buf; |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
837 self->zst.avail_out = length; |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
838 self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); |
|
20466
60e12f83d2d2
[ #403753 ] zlib decompress; uncontrollable memory usage
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20327
diff
changeset
|
839 |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
840 Py_BEGIN_ALLOW_THREADS |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
841 err = inflate(&(self->zst), Z_SYNC_FLUSH); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
842 Py_END_ALLOW_THREADS |
|
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
843 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
844 if (err == Z_NEED_DICT && self->zdict != NULL) { |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
845 Py_buffer zdict_buf; |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
846 if (PyObject_GetBuffer(self->zdict, &zdict_buf, PyBUF_SIMPLE) == -1) { |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
847 Py_DECREF(RetVal); |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
848 RetVal = NULL; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
849 goto error; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
850 } |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
851 |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
852 if ((size_t)zdict_buf.len > UINT_MAX) { |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
853 PyErr_SetString(PyExc_OverflowError, |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
854 "zdict length does not fit in an unsigned int"); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
855 PyBuffer_Release(&zdict_buf); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
856 Py_CLEAR(RetVal); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
857 goto error; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
858 } |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
859 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
860 err = inflateSetDictionary(&(self->zst), |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
861 zdict_buf.buf, (unsigned int)zdict_buf.len); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
862 PyBuffer_Release(&zdict_buf); |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
863 if (err != Z_OK) { |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
864 zlib_error(self->zst, err, "while decompressing data"); |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
865 Py_CLEAR(RetVal); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
866 goto error; |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
867 } |
|
77558
4931cbc58cde
Tidy up comments from dd4f7d5c51c7 (zlib compression dictionary support).
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
77528
diff
changeset
|
868 /* Repeat the call to inflate. */ |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
869 Py_BEGIN_ALLOW_THREADS |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
870 err = inflate(&(self->zst), Z_SYNC_FLUSH); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
871 Py_END_ALLOW_THREADS |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
872 } |
|
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
873 |
| 20469 | 874 /* While Z_OK and the output buffer is full, there might be more output. |
| 875 So extend the output buffer and try again. | |
| 876 */ | |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
877 while (err == Z_OK && self->zst.avail_out == 0) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
878 /* If max_length set, don't continue decompressing if we've already |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
879 reached the limit. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
880 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
881 if (max_length && length >= max_length) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
882 break; |
| 20469 | 883 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
884 /* otherwise, ... */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
885 old_length = length; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
886 length = length << 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
887 if (max_length && length > max_length) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
888 length = max_length; |
|
20466
60e12f83d2d2
[ #403753 ] zlib decompress; uncontrollable memory usage
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20327
diff
changeset
|
889 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
890 if (_PyBytes_Resize(&RetVal, length) < 0) { |
|
84520
ed0c9d77e179
Issue #18408: Fix usage of _PyBytes_Resize()
Victor Stinner <victor.stinner@gmail.com>
parents:
84518
diff
changeset
|
891 Py_CLEAR(RetVal); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
892 goto error; |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
893 } |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
894 self->zst.next_out = |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
895 (unsigned char *)PyBytes_AS_STRING(RetVal) + old_length; |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
896 self->zst.avail_out = length - old_length; |
| 20469 | 897 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
898 Py_BEGIN_ALLOW_THREADS |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
899 err = inflate(&(self->zst), Z_SYNC_FLUSH); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
900 Py_END_ALLOW_THREADS |
| 20469 | 901 } |
| 902 | |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
903 if (save_unconsumed_input(self, err) < 0) { |
|
70099
6a45567c7245
Issue #12050: zlib.decompressobj().decompress() now clears the unconsumed_tail
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
68054
diff
changeset
|
904 Py_DECREF(RetVal); |
|
6a45567c7245
Issue #12050: zlib.decompressobj().decompress() now clears the unconsumed_tail
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
68054
diff
changeset
|
905 RetVal = NULL; |
|
6a45567c7245
Issue #12050: zlib.decompressobj().decompress() now clears the unconsumed_tail
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
68054
diff
changeset
|
906 goto error; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
907 } |
| 20469 | 908 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
909 if (err == Z_STREAM_END) { |
|
80351
654eb5163ba1
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
diff
changeset
|
910 /* This is the logical place to call inflateEnd, but the old behaviour |
|
654eb5163ba1
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
diff
changeset
|
911 of only calling it on flush() is preserved. */ |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
912 self->eof = 1; |
|
80351
654eb5163ba1
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
diff
changeset
|
913 } else if (err != Z_OK && err != Z_BUF_ERROR) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
914 /* We will only get Z_BUF_ERROR if the output buffer was full |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
915 but there wasn't more output when we tried again, so it is |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
916 not an error condition. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
917 */ |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
918 zlib_error(self->zst, err, "while decompressing data"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
919 Py_DECREF(RetVal); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
920 RetVal = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
921 goto error; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
922 } |
|
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
923 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
924 if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { |
|
84520
ed0c9d77e179
Issue #18408: Fix usage of _PyBytes_Resize()
Victor Stinner <victor.stinner@gmail.com>
parents:
84518
diff
changeset
|
925 Py_CLEAR(RetVal); |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
926 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
927 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
928 error: |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
929 LEAVE_ZLIB(self); |
| 20469 | 930 return RetVal; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
931 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
932 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
933 PyDoc_STRVAR(comp_flush__doc__, |
| 9657 | 934 "flush( [mode] ) -- Return a string containing any remaining compressed data.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
935 "\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
936 "mode can be one of the constants Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH; the\n" |
| 9657 | 937 "default value used when mode is not specified is Z_FINISH.\n" |
| 938 "If mode == Z_FINISH, the compressor object can no longer be used after\n" | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
939 "calling the flush() method. Otherwise, more data can still be compressed."); |
| 5722 | 940 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
941 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
942 PyZlib_flush(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
943 { |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
944 int err; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
945 unsigned int length = DEFAULTALLOC, new_length; |
| 20469 | 946 PyObject *RetVal; |
| 947 int flushmode = Z_FINISH; | |
| 948 unsigned long start_total_out; | |
| 9657 | 949 |
| 20469 | 950 if (!PyArg_ParseTuple(args, "|i:flush", &flushmode)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
951 return NULL; |
| 9657 | 952 |
| 20469 | 953 /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in |
| 954 doing any work at all; just return an empty string. */ | |
| 955 if (flushmode == Z_NO_FLUSH) { | |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
956 return PyBytes_FromStringAndSize(NULL, 0); |
| 20469 | 957 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
958 |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
959 if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
960 return NULL; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
961 |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
962 ENTER_ZLIB(self); |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
963 |
| 20469 | 964 start_total_out = self->zst.total_out; |
| 965 self->zst.avail_in = 0; | |
|
16718
01c2470eeb2e
Patch #103373 from Donovan Baarda: This patch:
Andrew M. Kuchling <amk@amk.ca>
parents:
16369
diff
changeset
|
966 self->zst.avail_out = length; |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
967 self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
968 |
|
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
969 Py_BEGIN_ALLOW_THREADS |
|
16718
01c2470eeb2e
Patch #103373 from Donovan Baarda: This patch:
Andrew M. Kuchling <amk@amk.ca>
parents:
16369
diff
changeset
|
970 err = deflate(&(self->zst), flushmode); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
971 Py_END_ALLOW_THREADS |
| 20469 | 972 |
| 973 /* while Z_OK and the output buffer is full, there might be more output, | |
| 974 so extend the output buffer and try again */ | |
| 975 while (err == Z_OK && self->zst.avail_out == 0) { | |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
976 if (length <= (UINT_MAX >> 1)) |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
977 new_length = length << 1; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
978 else |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
979 new_length = UINT_MAX; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
980 if (_PyBytes_Resize(&RetVal, new_length) < 0) { |
|
84520
ed0c9d77e179
Issue #18408: Fix usage of _PyBytes_Resize()
Victor Stinner <victor.stinner@gmail.com>
parents:
84518
diff
changeset
|
981 Py_CLEAR(RetVal); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
982 goto error; |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
983 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
984 self->zst.next_out = |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
985 (unsigned char *)PyBytes_AS_STRING(RetVal) + length; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
986 self->zst.avail_out = length; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
987 length = new_length; |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
988 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
989 Py_BEGIN_ALLOW_THREADS |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
990 err = deflate(&(self->zst), flushmode); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
991 Py_END_ALLOW_THREADS |
| 20469 | 992 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
993 |
| 20469 | 994 /* If flushmode is Z_FINISH, we also have to call deflateEnd() to free |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
995 various data structures. Note we should only get Z_STREAM_END when |
| 20469 | 996 flushmode is Z_FINISH, but checking both for safety*/ |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
997 if (err == Z_STREAM_END && flushmode == Z_FINISH) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
998 err = deflateEnd(&(self->zst)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
999 if (err != Z_OK) { |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
1000 zlib_error(self->zst, err, "while finishing compression"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1001 Py_DECREF(RetVal); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1002 RetVal = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1003 goto error; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1004 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1005 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1006 self->is_initialised = 0; |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1007 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1008 /* We will only get Z_BUF_ERROR if the output buffer was full |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1009 but there wasn't more output when we tried again, so it is |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1010 not an error condition. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1011 */ |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
1012 } else if (err!=Z_OK && err!=Z_BUF_ERROR) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1013 zlib_error(self->zst, err, "while flushing"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1014 Py_DECREF(RetVal); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1015 RetVal = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1016 goto error; |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
1017 } |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1018 |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
1019 if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { |
|
84520
ed0c9d77e179
Issue #18408: Fix usage of _PyBytes_Resize()
Victor Stinner <victor.stinner@gmail.com>
parents:
84518
diff
changeset
|
1020 Py_CLEAR(RetVal); |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
1021 } |
| 20469 | 1022 |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1023 error: |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1024 LEAVE_ZLIB(self); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
1025 |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
1026 return RetVal; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1027 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1028 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1029 #ifdef HAVE_ZLIB_COPY |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
1030 |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
1031 /*[clinic] |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
1032 zlib.Compress.copy |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
1033 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1034 self: compobject |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1035 |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
1036 Return a copy of the compression object. |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
1037 [clinic]*/ |
|
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
1038 |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
1039 PyDoc_STRVAR(zlib_Compress_copy__doc__, |
|
87470
78ec18f5cb45
Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents:
87466
diff
changeset
|
1040 "copy()\n" |
|
78ec18f5cb45
Issue #19674: inspect.signature() now produces a correct signature
Larry Hastings <larry@hastings.org>
parents:
87466
diff
changeset
|
1041 "Return a copy of the compression object."); |
|
86465
8fde1a2c94dc
Issue #16612: Add "Argument Clinic", a compile-time preprocessor
Larry Hastings <larry@hastings.org>
parents:
84520
diff
changeset
|
1042 |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
1043 #define ZLIB_COMPRESS_COPY_METHODDEF \ |
|
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
1044 {"copy", (PyCFunction)zlib_Compress_copy, METH_NOARGS, zlib_Compress_copy__doc__}, |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1045 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1046 static PyObject * |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1047 zlib_Compress_copy(compobject *self) |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1048 /*[clinic checksum: 0b37c07f8f27deb7d4769951fbecf600a1006ef8]*/ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1049 { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1050 compobject *retval = NULL; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1051 int err; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1052 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1053 retval = newcompobject(&Comptype); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1054 if (!retval) return NULL; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1055 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1056 /* Copy the zstream state |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1057 * We use ENTER_ZLIB / LEAVE_ZLIB to make this thread-safe |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1058 */ |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1059 ENTER_ZLIB(self); |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1060 err = deflateCopy(&retval->zst, &self->zst); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1061 switch(err) { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1062 case(Z_OK): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1063 break; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1064 case(Z_STREAM_ERROR): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1065 PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1066 goto error; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1067 case(Z_MEM_ERROR): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1068 PyErr_SetString(PyExc_MemoryError, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1069 "Can't allocate memory for compression object"); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1070 goto error; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1071 default: |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1072 zlib_error(self->zst, err, "while copying compression object"); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1073 goto error; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1074 } |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1075 Py_INCREF(self->unused_data); |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1076 Py_INCREF(self->unconsumed_tail); |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1077 Py_XINCREF(self->zdict); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1078 Py_XDECREF(retval->unused_data); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1079 Py_XDECREF(retval->unconsumed_tail); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
1080 Py_XDECREF(retval->zdict); |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1081 retval->unused_data = self->unused_data; |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1082 retval->unconsumed_tail = self->unconsumed_tail; |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1083 retval->zdict = self->zdict; |
|
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1084 retval->eof = self->eof; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1085 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1086 /* Mark it as being initialized */ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1087 retval->is_initialised = 1; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1088 |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1089 LEAVE_ZLIB(self); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1090 return (PyObject *)retval; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1091 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1092 error: |
|
87500
b67b19859fb1
Clinic: fix "self converters" with METH_NOARGS functions.
Larry Hastings <larry@hastings.org>
parents:
87470
diff
changeset
|
1093 LEAVE_ZLIB(self); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1094 Py_XDECREF(retval); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1095 return NULL; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1096 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1097 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1098 PyDoc_STRVAR(decomp_copy__doc__, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1099 "copy() -- Return a copy of the decompression object."); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1100 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1101 static PyObject * |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1102 PyZlib_uncopy(compobject *self) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1103 { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1104 compobject *retval = NULL; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1105 int err; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1106 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1107 retval = newcompobject(&Decomptype); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1108 if (!retval) return NULL; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1109 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1110 /* Copy the zstream state |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1111 * We use ENTER_ZLIB / LEAVE_ZLIB to make this thread-safe |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1112 */ |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1113 ENTER_ZLIB(self); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1114 err = inflateCopy(&retval->zst, &self->zst); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1115 switch(err) { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1116 case(Z_OK): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1117 break; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1118 case(Z_STREAM_ERROR): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1119 PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1120 goto error; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1121 case(Z_MEM_ERROR): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1122 PyErr_SetString(PyExc_MemoryError, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1123 "Can't allocate memory for decompression object"); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1124 goto error; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1125 default: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1126 zlib_error(self->zst, err, "while copying decompression object"); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1127 goto error; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1128 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1129 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1130 Py_INCREF(self->unused_data); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1131 Py_INCREF(self->unconsumed_tail); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
1132 Py_XINCREF(self->zdict); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1133 Py_XDECREF(retval->unused_data); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1134 Py_XDECREF(retval->unconsumed_tail); |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
1135 Py_XDECREF(retval->zdict); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1136 retval->unused_data = self->unused_data; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1137 retval->unconsumed_tail = self->unconsumed_tail; |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
1138 retval->zdict = self->zdict; |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
1139 retval->eof = self->eof; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1140 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1141 /* Mark it as being initialized */ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1142 retval->is_initialised = 1; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1143 |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1144 LEAVE_ZLIB(self); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1145 return (PyObject *)retval; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1146 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1147 error: |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1148 LEAVE_ZLIB(self); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1149 Py_XDECREF(retval); |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1150 return NULL; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1151 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1152 #endif |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1153 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
1154 PyDoc_STRVAR(decomp_flush__doc__, |
|
37373
f64812b2b5c1
Patch #1459631: documnent zlib.Decompress.flush() length parameter.
Georg Brandl <georg@python.org>
parents:
36324
diff
changeset
|
1155 "flush( [length] ) -- Return a string containing any remaining\n" |
|
f64812b2b5c1
Patch #1459631: documnent zlib.Decompress.flush() length parameter.
Georg Brandl <georg@python.org>
parents:
36324
diff
changeset
|
1156 "decompressed data. length, if given, is the initial size of the\n" |
|
f64812b2b5c1
Patch #1459631: documnent zlib.Decompress.flush() length parameter.
Georg Brandl <georg@python.org>
parents:
36324
diff
changeset
|
1157 "output buffer.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1158 "\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
1159 "The decompressor object can no longer be used after this call."); |
| 5722 | 1160 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1161 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
1162 PyZlib_unflush(compobject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1163 { |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1164 int err; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1165 unsigned int length = DEFAULTALLOC, new_length; |
|
20477
c23989e22ffa
Simplify and fix error handling for most cases.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
20475
diff
changeset
|
1166 PyObject * retval = NULL; |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1167 unsigned long start_total_out; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1168 Py_ssize_t size; |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1169 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1170 if (!PyArg_ParseTuple(args, "|O&:flush", uint_converter, &length)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1171 return NULL; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1172 if (length == 0) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1173 PyErr_SetString(PyExc_ValueError, "length must be greater than zero"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1174 return NULL; |
|
46370
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46084
diff
changeset
|
1175 } |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1176 |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
1177 if (!(retval = PyBytes_FromStringAndSize(NULL, length))) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1178 return NULL; |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1179 |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
1180 |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1181 ENTER_ZLIB(self); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
1182 |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1183 size = PyBytes_GET_SIZE(self->unconsumed_tail); |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1184 |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1185 start_total_out = self->zst.total_out; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1186 /* save_unconsumed_input() ensures that unconsumed_tail length is lesser |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1187 or equal than UINT_MAX */ |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1188 self->zst.avail_in = Py_SAFE_DOWNCAST(size, Py_ssize_t, unsigned int); |
|
80354
a1db815d0829
Issue #16411: Fix a bug where zlib.decompressobj().flush() might try to access previously-freed memory.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80350
diff
changeset
|
1189 self->zst.next_in = (Byte *)PyBytes_AS_STRING(self->unconsumed_tail); |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1190 self->zst.avail_out = length; |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
1191 self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval); |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1192 |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1193 Py_BEGIN_ALLOW_THREADS |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1194 err = inflate(&(self->zst), Z_FINISH); |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1195 Py_END_ALLOW_THREADS |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1196 |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1197 /* while Z_OK and the output buffer is full, there might be more output, |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1198 so extend the output buffer and try again */ |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1199 while ((err == Z_OK || err == Z_BUF_ERROR) && self->zst.avail_out == 0) { |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1200 if (length <= (UINT_MAX >> 1)) |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1201 new_length = length << 1; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1202 else |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1203 new_length = UINT_MAX; |
|
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1204 if (_PyBytes_Resize(&retval, new_length) < 0) { |
|
84520
ed0c9d77e179
Issue #18408: Fix usage of _PyBytes_Resize()
Victor Stinner <victor.stinner@gmail.com>
parents:
84518
diff
changeset
|
1205 Py_CLEAR(retval); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1206 goto error; |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
1207 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1208 self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval) + length; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1209 self->zst.avail_out = length; |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1210 length = new_length; |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1211 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1212 Py_BEGIN_ALLOW_THREADS |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1213 err = inflate(&(self->zst), Z_FINISH); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1214 Py_END_ALLOW_THREADS |
| 20469 | 1215 } |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
1216 |
|
80350
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
1217 if (save_unconsumed_input(self, err) < 0) { |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
1218 Py_DECREF(retval); |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
1219 retval = NULL; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
1220 goto error; |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
1221 } |
|
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
1222 |
|
71858
65d61ed991d9
Fix incorrect comment in zlib.Decompress.flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
71857
diff
changeset
|
1223 /* If at end of stream, clean up any memory allocated by zlib. */ |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1224 if (err == Z_STREAM_END) { |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
1225 self->eof = 1; |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1226 self->is_initialised = 0; |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
1227 err = inflateEnd(&(self->zst)); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1228 if (err != Z_OK) { |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
1229 zlib_error(self->zst, err, "while finishing decompression"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1230 Py_DECREF(retval); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1231 retval = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1232 goto error; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1233 } |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1234 } |
|
80350
85886268c40b
Issue #16350, part 2: Set unused_data (and unconsumed_tail) correctly in decompressobj().flush().
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80255
diff
changeset
|
1235 |
|
49051
c1a8f6b648ea
Fixes release blocker issue #3492 and #3790.
Gregory P. Smith <greg@mad-scientist.com>
parents:
48683
diff
changeset
|
1236 if (_PyBytes_Resize(&retval, self->zst.total_out - start_total_out) < 0) { |
|
84520
ed0c9d77e179
Issue #18408: Fix usage of _PyBytes_Resize()
Victor Stinner <victor.stinner@gmail.com>
parents:
84518
diff
changeset
|
1237 Py_CLEAR(retval); |
|
41829
f7f2a49c1f2e
zlib now uses bytes everywhere, and the test passes.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
1238 } |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1239 |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1240 error: |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1241 |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1242 LEAVE_ZLIB(self); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
1243 |
| 20469 | 1244 return retval; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1245 } |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1246 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1247 static PyMethodDef comp_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1248 { |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1249 {"compress", (binaryfunc)PyZlib_objcompress, METH_VARARGS, |
| 20469 | 1250 comp_compress__doc__}, |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1251 {"flush", (binaryfunc)PyZlib_flush, METH_VARARGS, |
| 20469 | 1252 comp_flush__doc__}, |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1253 #ifdef HAVE_ZLIB_COPY |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
1254 ZLIB_COMPRESS_COPY_METHODDEF |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1255 #endif |
| 20469 | 1256 {NULL, NULL} |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1257 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1258 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1259 static PyMethodDef Decomp_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1260 { |
|
87245
64c853a88a10
Argument Clinic: rename "self" to "module" for module-level functions.
Larry Hastings <larry@hastings.org>
parents:
86465
diff
changeset
|
1261 ZLIB_DECOMPRESS_DECOMPRESS_METHODDEF |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1262 {"flush", (binaryfunc)PyZlib_unflush, METH_VARARGS, |
| 20469 | 1263 decomp_flush__doc__}, |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1264 #ifdef HAVE_ZLIB_COPY |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1265 {"copy", (PyCFunction)PyZlib_uncopy, METH_NOARGS, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37373
diff
changeset
|
1266 decomp_copy__doc__}, |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1267 #endif |
| 20469 | 1268 {NULL, NULL} |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1269 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1270 |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1271 #define COMP_OFF(x) offsetof(compobject, x) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1272 static PyMemberDef Decomp_members[] = { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1273 {"unused_data", T_OBJECT, COMP_OFF(unused_data), READONLY}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1274 {"unconsumed_tail", T_OBJECT, COMP_OFF(unconsumed_tail), READONLY}, |
|
71857
bb6c2d5c811d
Issue #12646: Add an 'eof' attribute to zlib.Decompress.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
70120
diff
changeset
|
1275 {"eof", T_BOOL, COMP_OFF(eof), READONLY}, |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1276 {NULL}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1277 }; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1278 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
1279 PyDoc_STRVAR(adler32__doc__, |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1280 "adler32(string[, start]) -- Compute an Adler-32 checksum of string.\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1281 "\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1282 "An optional starting value can be specified. The returned checksum is\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
1283 "an integer."); |
| 5722 | 1284 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1285 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
1286 PyZlib_adler32(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1287 { |
|
46084
6bea2f1351b1
Merged revisions 61834,61841-61842,61851-61853,61863-61864,61869-61870,61874,61889 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46042
diff
changeset
|
1288 unsigned int adler32val = 1; /* adler32(0L, Z_NULL, 0) */ |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1289 Py_buffer pbuf; |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1290 |
|
57736
919e2142726e
Merged revisions 76836 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51270
diff
changeset
|
1291 if (!PyArg_ParseTuple(args, "y*|I:adler32", &pbuf, &adler32val)) |
|
919e2142726e
Merged revisions 76836 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51270
diff
changeset
|
1292 return NULL; |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1293 /* Releasing the GIL for very small buffers is inefficient |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1294 and may lower performance */ |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1295 if (pbuf.len > 1024*5) { |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1296 unsigned char *buf = pbuf.buf; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1297 Py_ssize_t len = pbuf.len; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1298 |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1299 Py_BEGIN_ALLOW_THREADS |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1300 /* Avoid truncation of length for very large buffers. adler32() takes |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1301 length as an unsigned int, which may be narrower than Py_ssize_t. */ |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1302 while ((size_t)len > UINT_MAX) { |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1303 adler32val = adler32(adler32val, buf, UINT_MAX); |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1304 buf += (size_t) UINT_MAX; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1305 len -= (size_t) UINT_MAX; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1306 } |
|
84320
931e1bc090f6
Issue #9566: zlib: Explicit cast to unsigned int to fix a compiler warning on Windows x64
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
1307 adler32val = adler32(adler32val, buf, (unsigned int)len); |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1308 Py_END_ALLOW_THREADS |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1309 } else { |
|
84320
931e1bc090f6
Issue #9566: zlib: Explicit cast to unsigned int to fix a compiler warning on Windows x64
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
1310 adler32val = adler32(adler32val, pbuf.buf, (unsigned int)pbuf.len); |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1311 } |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1312 PyBuffer_Release(&pbuf); |
|
45951
132cf3a79126
crc32 always returns unsigned. cleanup the code a bit and revert r61648 with
Gregory P. Smith <greg@mad-scientist.com>
parents:
45935
diff
changeset
|
1313 return PyLong_FromUnsignedLong(adler32val & 0xffffffffU); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1314 } |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1315 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
1316 PyDoc_STRVAR(crc32__doc__, |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1317 "crc32(string[, start]) -- Compute a CRC-32 checksum of string.\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1318 "\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1319 "An optional starting value can be specified. The returned checksum is\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
1320 "an integer."); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1321 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1322 static PyObject * |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
12576
diff
changeset
|
1323 PyZlib_crc32(PyObject *self, PyObject *args) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1324 { |
|
46084
6bea2f1351b1
Merged revisions 61834,61841-61842,61851-61853,61863-61864,61869-61870,61874,61889 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46042
diff
changeset
|
1325 unsigned int crc32val = 0; /* crc32(0L, Z_NULL, 0) */ |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
1326 Py_buffer pbuf; |
|
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
1327 int signed_val; |
|
46084
6bea2f1351b1
Merged revisions 61834,61841-61842,61851-61853,61863-61864,61869-61870,61874,61889 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46042
diff
changeset
|
1328 |
|
57736
919e2142726e
Merged revisions 76836 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51270
diff
changeset
|
1329 if (!PyArg_ParseTuple(args, "y*|I:crc32", &pbuf, &crc32val)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1330 return NULL; |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1331 /* Releasing the GIL for very small buffers is inefficient |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1332 and may lower performance */ |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1333 if (pbuf.len > 1024*5) { |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1334 unsigned char *buf = pbuf.buf; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1335 Py_ssize_t len = pbuf.len; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1336 |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1337 Py_BEGIN_ALLOW_THREADS |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1338 /* Avoid truncation of length for very large buffers. crc32() takes |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1339 length as an unsigned int, which may be narrower than Py_ssize_t. */ |
|
87319
f947fe289db8
Close #18294: Fix the zlib module to make it 64-bit safe
Victor Stinner <victor.stinner@gmail.com>
parents:
87245
diff
changeset
|
1340 while ((size_t)len > UINT_MAX) { |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1341 crc32val = crc32(crc32val, buf, UINT_MAX); |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1342 buf += (size_t) UINT_MAX; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1343 len -= (size_t) UINT_MAX; |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61523
diff
changeset
|
1344 } |
|
84320
931e1bc090f6
Issue #9566: zlib: Explicit cast to unsigned int to fix a compiler warning on Windows x64
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
1345 signed_val = crc32(crc32val, buf, (unsigned int)len); |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1346 Py_END_ALLOW_THREADS |
|
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1347 } else { |
|
84320
931e1bc090f6
Issue #9566: zlib: Explicit cast to unsigned int to fix a compiler warning on Windows x64
Victor Stinner <victor.stinner@gmail.com>
parents:
83867
diff
changeset
|
1348 signed_val = crc32(crc32val, pbuf.buf, (unsigned int)pbuf.len); |
|
50453
400cfcaa8d46
Issue #4738: finer-grained locking in the zlib module.
Antoine Pitrou <solipsis@pitrou.net>
parents:
49051
diff
changeset
|
1349 } |
|
48683
cd3b0b7fd8e1
Merged revisions 65654 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
48413
diff
changeset
|
1350 PyBuffer_Release(&pbuf); |
|
46084
6bea2f1351b1
Merged revisions 61834,61841-61842,61851-61853,61863-61864,61869-61870,61874,61889 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46042
diff
changeset
|
1351 return PyLong_FromUnsignedLong(signed_val & 0xffffffffU); |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1352 } |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1353 |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1354 |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1355 static PyMethodDef zlib_methods[] = |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1356 { |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1357 {"adler32", (PyCFunction)PyZlib_adler32, METH_VARARGS, |
| 20469 | 1358 adler32__doc__}, |
|
87466
760ccd78e874
Issue #19730: Argument Clinic now supports all the existing PyArg
Larry Hastings <larry@hastings.org>
parents:
87319
diff
changeset
|
1359 ZLIB_COMPRESS_METHODDEF |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
1360 {"compressobj", (PyCFunction)PyZlib_compressobj, METH_VARARGS|METH_KEYWORDS, |
| 20469 | 1361 compressobj__doc__}, |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1362 {"crc32", (PyCFunction)PyZlib_crc32, METH_VARARGS, |
|
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1363 crc32__doc__}, |
|
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1364 {"decompress", (PyCFunction)PyZlib_decompress, METH_VARARGS, |
| 20469 | 1365 decompress__doc__}, |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
1366 {"decompressobj", (PyCFunction)PyZlib_decompressobj, METH_VARARGS|METH_KEYWORDS, |
| 20469 | 1367 decompressobj__doc__}, |
| 1368 {NULL, NULL} | |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1369 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1370 |
|
24283
c0a67a1cab09
Removed more stray instances of statichere, but left _sre.c alone.
Tim Peters <tim.peters@gmail.com>
parents:
24280
diff
changeset
|
1371 static PyTypeObject Comptype = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41829
diff
changeset
|
1372 PyVarObject_HEAD_INIT(0, 0) |
|
21313
91dd223829c6
Patch supplied by Burton Radons for his own SF bug #487390: Modifying
Guido van Rossum <guido@python.org>
parents:
20644
diff
changeset
|
1373 "zlib.Compress", |
| 20469 | 1374 sizeof(compobject), |
| 1375 0, | |
| 1376 (destructor)Comp_dealloc, /*tp_dealloc*/ | |
| 1377 0, /*tp_print*/ | |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1378 0, /*tp_getattr*/ |
| 20469 | 1379 0, /*tp_setattr*/ |
|
51270
debd14c489b9
Issue #1717: rename tp_compare to tp_reserved. I'll change the
Mark Dickinson <dickinsm@gmail.com>
parents:
50453
diff
changeset
|
1380 0, /*tp_reserved*/ |
| 20469 | 1381 0, /*tp_repr*/ |
| 1382 0, /*tp_as_number*/ | |
| 1383 0, /*tp_as_sequence*/ | |
| 1384 0, /*tp_as_mapping*/ | |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1385 0, /*tp_hash*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1386 0, /*tp_call*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1387 0, /*tp_str*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1388 0, /*tp_getattro*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1389 0, /*tp_setattro*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1390 0, /*tp_as_buffer*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1391 Py_TPFLAGS_DEFAULT, /*tp_flags*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1392 0, /*tp_doc*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1393 0, /*tp_traverse*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1394 0, /*tp_clear*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1395 0, /*tp_richcompare*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1396 0, /*tp_weaklistoffset*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1397 0, /*tp_iter*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1398 0, /*tp_iternext*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1399 comp_methods, /*tp_methods*/ |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1400 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1401 |
|
24283
c0a67a1cab09
Removed more stray instances of statichere, but left _sre.c alone.
Tim Peters <tim.peters@gmail.com>
parents:
24280
diff
changeset
|
1402 static PyTypeObject Decomptype = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41829
diff
changeset
|
1403 PyVarObject_HEAD_INIT(0, 0) |
|
21313
91dd223829c6
Patch supplied by Burton Radons for his own SF bug #487390: Modifying
Guido van Rossum <guido@python.org>
parents:
20644
diff
changeset
|
1404 "zlib.Decompress", |
| 20469 | 1405 sizeof(compobject), |
| 1406 0, | |
| 1407 (destructor)Decomp_dealloc, /*tp_dealloc*/ | |
| 1408 0, /*tp_print*/ | |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1409 0, /*tp_getattr*/ |
| 20469 | 1410 0, /*tp_setattr*/ |
|
51270
debd14c489b9
Issue #1717: rename tp_compare to tp_reserved. I'll change the
Mark Dickinson <dickinsm@gmail.com>
parents:
50453
diff
changeset
|
1411 0, /*tp_reserved*/ |
| 20469 | 1412 0, /*tp_repr*/ |
| 1413 0, /*tp_as_number*/ | |
| 1414 0, /*tp_as_sequence*/ | |
| 1415 0, /*tp_as_mapping*/ | |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1416 0, /*tp_hash*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1417 0, /*tp_call*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1418 0, /*tp_str*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1419 0, /*tp_getattro*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1420 0, /*tp_setattro*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1421 0, /*tp_as_buffer*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1422 Py_TPFLAGS_DEFAULT, /*tp_flags*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1423 0, /*tp_doc*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1424 0, /*tp_traverse*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1425 0, /*tp_clear*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1426 0, /*tp_richcompare*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1427 0, /*tp_weaklistoffset*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1428 0, /*tp_iter*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1429 0, /*tp_iternext*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1430 Decomp_methods, /*tp_methods*/ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1431 Decomp_members, /*tp_members*/ |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1432 }; |
|
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1433 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
1434 PyDoc_STRVAR(zlib_module_documentation, |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1435 "The functions in this module allow compression and decompression using the\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1436 "zlib library, which is based on GNU zip.\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1437 "\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1438 "adler32(string[, start]) -- Compute an Adler-32 checksum.\n" |
|
80386
9dde30690f44
Issue #15677: Document that zlib and gzip accept a compression level of 0 to mean 'no compression'.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
80354
diff
changeset
|
1439 "compress(string[, level]) -- Compress string, with compression level in 0-9.\n" |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
1440 "compressobj([level[, ...]]) -- Return a compressor object.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1441 "crc32(string[, start]) -- Compute a CRC-32 checksum.\n" |
|
11607
69216c11a1bd
Fix typo in docstring: wbites -> wbits
Andrew M. Kuchling <amk@amk.ca>
parents:
10571
diff
changeset
|
1442 "decompress(string,[wbits],[bufsize]) -- Decompresses a compressed string.\n" |
|
77528
dd4f7d5c51c7
Issue #14684: Add support for predefined compression dictionaries to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72341
diff
changeset
|
1443 "decompressobj([wbits[, zdict]]]) -- Return a decompressor object.\n" |
|
20485
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1444 "\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1445 "'wbits' is window buffer size.\n" |
|
4af8d24fa691
Simplify and regularize docstrings. Also reformat so that each docstring
Tim Peters <tim.peters@gmail.com>
parents:
20484
diff
changeset
|
1446 "Compressor objects support compress() and flush() methods; decompressor\n" |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23295
diff
changeset
|
1447 "objects support decompress() and flush()."); |
| 5722 | 1448 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47300
diff
changeset
|
1449 static struct PyModuleDef zlibmodule = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1450 PyModuleDef_HEAD_INIT, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1451 "zlib", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1452 zlib_module_documentation, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1453 -1, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1454 zlib_methods, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1455 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1456 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1457 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1458 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47300
diff
changeset
|
1459 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47300
diff
changeset
|
1460 |
|
24363
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24283
diff
changeset
|
1461 PyMODINIT_FUNC |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13496
diff
changeset
|
1462 PyInit_zlib(void) |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1463 { |
|
22729
cdff3c7c1a76
Use the PyModule_Add*() APIs instead of manipulating the module dict
Fred Drake <fdrake@acm.org>
parents:
22217
diff
changeset
|
1464 PyObject *m, *ver; |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1465 if (PyType_Ready(&Comptype) < 0) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1466 return NULL; |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
1467 if (PyType_Ready(&Decomptype) < 0) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1468 return NULL; |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47300
diff
changeset
|
1469 m = PyModule_Create(&zlibmodule); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
35914
diff
changeset
|
1470 if (m == NULL) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1471 return NULL; |
|
22729
cdff3c7c1a76
Use the PyModule_Add*() APIs instead of manipulating the module dict
Fred Drake <fdrake@acm.org>
parents:
22217
diff
changeset
|
1472 |
| 20469 | 1473 ZlibError = PyErr_NewException("zlib.error", NULL, NULL); |
|
22729
cdff3c7c1a76
Use the PyModule_Add*() APIs instead of manipulating the module dict
Fred Drake <fdrake@acm.org>
parents:
22217
diff
changeset
|
1474 if (ZlibError != NULL) { |
|
cdff3c7c1a76
Use the PyModule_Add*() APIs instead of manipulating the module dict
Fred Drake <fdrake@acm.org>
parents:
22217
diff
changeset
|
1475 Py_INCREF(ZlibError); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1476 PyModule_AddObject(m, "error", ZlibError); |
|
22729
cdff3c7c1a76
Use the PyModule_Add*() APIs instead of manipulating the module dict
Fred Drake <fdrake@acm.org>
parents:
22217
diff
changeset
|
1477 } |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1478 PyModule_AddIntMacro(m, MAX_WBITS); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1479 PyModule_AddIntMacro(m, DEFLATED); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1480 PyModule_AddIntMacro(m, DEF_MEM_LEVEL); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1481 PyModule_AddIntMacro(m, Z_BEST_SPEED); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1482 PyModule_AddIntMacro(m, Z_BEST_COMPRESSION); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1483 PyModule_AddIntMacro(m, Z_DEFAULT_COMPRESSION); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1484 PyModule_AddIntMacro(m, Z_FILTERED); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1485 PyModule_AddIntMacro(m, Z_HUFFMAN_ONLY); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1486 PyModule_AddIntMacro(m, Z_DEFAULT_STRATEGY); |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1487 |
|
83867
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1488 PyModule_AddIntMacro(m, Z_FINISH); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1489 PyModule_AddIntMacro(m, Z_NO_FLUSH); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1490 PyModule_AddIntMacro(m, Z_SYNC_FLUSH); |
|
12cbb5183d98
Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents:
83676
diff
changeset
|
1491 PyModule_AddIntMacro(m, Z_FULL_FLUSH); |
|
20484
1a9494f9edb2
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
20483
diff
changeset
|
1492 |
|
42750
ce52cd71a8d9
Convert a bunch of constant strings in C to unicode.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42334
diff
changeset
|
1493 ver = PyUnicode_FromString(ZLIB_VERSION); |
|
22729
cdff3c7c1a76
Use the PyModule_Add*() APIs instead of manipulating the module dict
Fred Drake <fdrake@acm.org>
parents:
22217
diff
changeset
|
1494 if (ver != NULL) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61370
diff
changeset
|
1495 PyModule_AddObject(m, "ZLIB_VERSION", ver); |
|
19798
091c01d07d98
Patch #450702: allow threads when calling into zlib, protect usage of
Martin v. Löwis <martin@v.loewis.de>
parents:
16735
diff
changeset
|
1496 |
|
72341
b21d1de6d78e
Issue #12306: Add ZLIB_RUNTIME_VERSION to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72112
diff
changeset
|
1497 ver = PyUnicode_FromString(zlibVersion()); |
|
b21d1de6d78e
Issue #12306: Add ZLIB_RUNTIME_VERSION to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72112
diff
changeset
|
1498 if (ver != NULL) |
|
b21d1de6d78e
Issue #12306: Add ZLIB_RUNTIME_VERSION to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72112
diff
changeset
|
1499 PyModule_AddObject(m, "ZLIB_RUNTIME_VERSION", ver); |
|
b21d1de6d78e
Issue #12306: Add ZLIB_RUNTIME_VERSION to the zlib module.
Nadeem Vawda <nadeem.vawda@gmail.com>
parents:
72112
diff
changeset
|
1500 |
|
27653
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1501 PyModule_AddStringConstant(m, "__version__", "1.0"); |
|
106a44a4b975
- Thanks to Scott David Daniels, a subtle bug in how the zlib
Guido van Rossum <guido@python.org>
parents:
24363
diff
changeset
|
1502 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47300
diff
changeset
|
1503 return m; |
|
5352
d5757aad1a4f
Added Andrew Kuchling's zlib module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1504 } |
