Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
776152b6
Commit
776152b6
authored
May 22, 2007
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
zlib now uses bytes everywhere, and the test passes.
parent
dcee3c0d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
104 additions
and
78 deletions
+104
-78
Lib/test/test_zlib.py
Lib/test/test_zlib.py
+42
-42
Modules/zlibmodule.c
Modules/zlibmodule.c
+62
-36
No files found.
Lib/test/test_zlib.py
View file @
776152b6
...
...
@@ -7,22 +7,22 @@ import random
class
ChecksumTestCase
(
unittest
.
TestCase
):
# checksum test cases
def
test_crc32start
(
self
):
self
.
assertEqual
(
zlib
.
crc32
(
""
),
zlib
.
crc32
(
""
,
0
))
self
.
assert_
(
zlib
.
crc32
(
"abc"
,
0xffffffff
))
self
.
assertEqual
(
zlib
.
crc32
(
b""
),
zlib
.
crc32
(
b
""
,
0
))
self
.
assert_
(
zlib
.
crc32
(
b
"abc"
,
0xffffffff
))
def
test_crc32empty
(
self
):
self
.
assertEqual
(
zlib
.
crc32
(
""
,
0
),
0
)
self
.
assertEqual
(
zlib
.
crc32
(
""
,
1
),
1
)
self
.
assertEqual
(
zlib
.
crc32
(
""
,
432
),
432
)
self
.
assertEqual
(
zlib
.
crc32
(
b
""
,
0
),
0
)
self
.
assertEqual
(
zlib
.
crc32
(
b
""
,
1
),
1
)
self
.
assertEqual
(
zlib
.
crc32
(
b
""
,
432
),
432
)
def
test_adler32start
(
self
):
self
.
assertEqual
(
zlib
.
adler32
(
""
),
zlib
.
adler32
(
""
,
1
))
self
.
assert_
(
zlib
.
adler32
(
"abc"
,
0xffffffff
))
self
.
assertEqual
(
zlib
.
adler32
(
b""
),
zlib
.
adler32
(
b
""
,
1
))
self
.
assert_
(
zlib
.
adler32
(
b
"abc"
,
0xffffffff
))
def
test_adler32empty
(
self
):
self
.
assertEqual
(
zlib
.
adler32
(
""
,
0
),
0
)
self
.
assertEqual
(
zlib
.
adler32
(
""
,
1
),
1
)
self
.
assertEqual
(
zlib
.
adler32
(
""
,
432
),
432
)
self
.
assertEqual
(
zlib
.
adler32
(
b
""
,
0
),
0
)
self
.
assertEqual
(
zlib
.
adler32
(
b
""
,
1
),
1
)
self
.
assertEqual
(
zlib
.
adler32
(
b
""
,
432
),
432
)
def
assertEqual32
(
self
,
seen
,
expected
):
# 32-bit values masked -- checksums on 32- vs 64- bit machines
...
...
@@ -30,13 +30,13 @@ class ChecksumTestCase(unittest.TestCase):
self
.
assertEqual
(
seen
&
0x0FFFFFFFF
,
expected
&
0x0FFFFFFFF
)
def
test_penguins
(
self
):
self
.
assertEqual32
(
zlib
.
crc32
(
"penguin"
,
0
),
0x0e5c1a120
)
self
.
assertEqual32
(
zlib
.
crc32
(
"penguin"
,
1
),
0x43b6aa94
)
self
.
assertEqual32
(
zlib
.
adler32
(
"penguin"
,
0
),
0x0bcf02f6
)
self
.
assertEqual32
(
zlib
.
adler32
(
"penguin"
,
1
),
0x0bd602f7
)
self
.
assertEqual32
(
zlib
.
crc32
(
b
"penguin"
,
0
),
0x0e5c1a120
)
self
.
assertEqual32
(
zlib
.
crc32
(
b
"penguin"
,
1
),
0x43b6aa94
)
self
.
assertEqual32
(
zlib
.
adler32
(
b
"penguin"
,
0
),
0x0bcf02f6
)
self
.
assertEqual32
(
zlib
.
adler32
(
b
"penguin"
,
1
),
0x0bd602f7
)
self
.
assertEqual
(
zlib
.
crc32
(
"penguin"
),
zlib
.
crc32
(
"penguin"
,
0
))
self
.
assertEqual
(
zlib
.
adler32
(
"penguin"
),
zlib
.
adler32
(
"penguin"
,
1
))
self
.
assertEqual
(
zlib
.
crc32
(
b"penguin"
),
zlib
.
crc32
(
b
"penguin"
,
0
))
self
.
assertEqual
(
zlib
.
adler32
(
b"penguin"
),
zlib
.
adler32
(
b
"penguin"
,
1
))
...
...
@@ -109,10 +109,10 @@ class CompressObjectTestCase(unittest.TestCase):
for
i
in
range
(
0
,
len
(
data
),
256
):
bufs
.
append
(
co
.
compress
(
data
[
i
:
i
+
256
]))
bufs
.
append
(
co
.
flush
())
combuf
=
''
.
join
(
bufs
)
combuf
=
b
''
.
join
(
bufs
)
dco
=
zlib
.
decompressobj
()
y1
=
dco
.
decompress
(
''
.
join
(
bufs
))
y1
=
dco
.
decompress
(
b
''
.
join
(
bufs
))
y2
=
dco
.
flush
()
self
.
assertEqual
(
data
,
y1
+
y2
)
...
...
@@ -125,7 +125,7 @@ class CompressObjectTestCase(unittest.TestCase):
for
i
in
range
(
0
,
len
(
data
),
cx
):
bufs
.
append
(
co
.
compress
(
data
[
i
:
i
+
cx
]))
bufs
.
append
(
co
.
flush
())
combuf
=
''
.
join
(
bufs
)
combuf
=
b
''
.
join
(
bufs
)
self
.
assertEqual
(
data
,
zlib
.
decompress
(
combuf
))
...
...
@@ -133,8 +133,8 @@ class CompressObjectTestCase(unittest.TestCase):
bufs
=
[]
for
i
in
range
(
0
,
len
(
combuf
),
dcx
):
bufs
.
append
(
dco
.
decompress
(
combuf
[
i
:
i
+
dcx
]))
self
.
assertEqual
(
''
,
dco
.
unconsumed_tail
,
########
"(A) uct should be '': not %d long"
%
self
.
assertEqual
(
b
''
,
dco
.
unconsumed_tail
,
########
"(A) uct should be
b
'': not %d long"
%
len
(
dco
.
unconsumed_tail
))
if
flush
:
bufs
.
append
(
dco
.
flush
())
...
...
@@ -145,10 +145,10 @@ class CompressObjectTestCase(unittest.TestCase):
bufs
.
append
(
chunk
)
else
:
break
self
.
assertEqual
(
''
,
dco
.
unconsumed_tail
,
########
"(B) uct should be '': not %d long"
%
self
.
assertEqual
(
b
''
,
dco
.
unconsumed_tail
,
########
"(B) uct should be
b
'': not %d long"
%
len
(
dco
.
unconsumed_tail
))
self
.
assertEqual
(
data
,
''
.
join
(
bufs
))
self
.
assertEqual
(
data
,
b
''
.
join
(
bufs
))
# Failure means: "decompressobj with init options failed"
def
test_decompincflush
(
self
):
...
...
@@ -164,7 +164,7 @@ class CompressObjectTestCase(unittest.TestCase):
for
i
in
range
(
0
,
len
(
data
),
cx
):
bufs
.
append
(
co
.
compress
(
data
[
i
:
i
+
cx
]))
bufs
.
append
(
co
.
flush
())
combuf
=
''
.
join
(
bufs
)
combuf
=
b
''
.
join
(
bufs
)
self
.
assertEqual
(
data
,
zlib
.
decompress
(
combuf
),
'compressed data failure'
)
...
...
@@ -179,7 +179,7 @@ class CompressObjectTestCase(unittest.TestCase):
bufs
.
append
(
chunk
)
cb
=
dco
.
unconsumed_tail
bufs
.
append
(
dco
.
flush
())
self
.
assertEqual
(
data
,
''
.
join
(
bufs
),
'Wrong data retrieved'
)
self
.
assertEqual
(
data
,
b
''
.
join
(
bufs
),
'Wrong data retrieved'
)
def
test_decompressmaxlen
(
self
,
flush
=
False
):
# Check a decompression object with max_length specified
...
...
@@ -189,7 +189,7 @@ class CompressObjectTestCase(unittest.TestCase):
for
i
in
range
(
0
,
len
(
data
),
256
):
bufs
.
append
(
co
.
compress
(
data
[
i
:
i
+
256
]))
bufs
.
append
(
co
.
flush
())
combuf
=
''
.
join
(
bufs
)
combuf
=
b
''
.
join
(
bufs
)
self
.
assertEqual
(
data
,
zlib
.
decompress
(
combuf
),
'compressed data failure'
)
...
...
@@ -211,7 +211,7 @@ class CompressObjectTestCase(unittest.TestCase):
self
.
failIf
(
len
(
chunk
)
>
max_length
,
'chunk too big (%d>%d)'
%
(
len
(
chunk
),
max_length
))
bufs
.
append
(
chunk
)
self
.
assertEqual
(
data
,
''
.
join
(
bufs
),
'Wrong data retrieved'
)
self
.
assertEqual
(
data
,
b
''
.
join
(
bufs
),
'Wrong data retrieved'
)
def
test_decompressmaxlenflush
(
self
):
self
.
test_decompressmaxlen
(
flush
=
True
)
...
...
@@ -220,7 +220,7 @@ class CompressObjectTestCase(unittest.TestCase):
# Misc tests of max_length
dco
=
zlib
.
decompressobj
()
self
.
assertRaises
(
ValueError
,
dco
.
decompress
,
""
,
-
1
)
self
.
assertEqual
(
''
,
dco
.
unconsumed_tail
)
self
.
assertEqual
(
b
''
,
dco
.
unconsumed_tail
)
def
test_flushes
(
self
):
# Test flush() with the various options, using all the
...
...
@@ -237,7 +237,7 @@ class CompressObjectTestCase(unittest.TestCase):
b
=
obj
.
flush
(
sync
)
c
=
obj
.
compress
(
data
[
3000
:]
)
d
=
obj
.
flush
()
self
.
assertEqual
(
zlib
.
decompress
(
''
.
join
([
a
,
b
,
c
,
d
])),
self
.
assertEqual
(
zlib
.
decompress
(
b
''
.
join
([
a
,
b
,
c
,
d
])),
data
,
(
"Decompress failed: flush "
"mode=%i, level=%i"
)
%
(
sync
,
level
))
del
obj
...
...
@@ -284,13 +284,13 @@ class CompressObjectTestCase(unittest.TestCase):
co
=
zlib
.
compressobj
(
zlib
.
Z_BEST_COMPRESSION
)
self
.
failUnless
(
co
.
flush
())
# Returns a zlib header
dco
=
zlib
.
decompressobj
()
self
.
assertEqual
(
dco
.
flush
(),
""
)
# Returns nothing
self
.
assertEqual
(
dco
.
flush
(),
b
""
)
# Returns nothing
if
hasattr
(
zlib
.
compressobj
(),
"copy"
):
def
test_compresscopy
(
self
):
# Test copying a compression object
data0
=
HAMLET_SCENE
data1
=
HAMLET_SCENE
.
swapcase
(
)
data1
=
bytes
(
str
(
HAMLET_SCENE
,
"ascii"
).
swapcase
(),
"ascii"
)
c0
=
zlib
.
compressobj
(
zlib
.
Z_BEST_COMPRESSION
)
bufs0
=
[]
bufs0
.
append
(
c0
.
compress
(
data0
))
...
...
@@ -300,11 +300,11 @@ class CompressObjectTestCase(unittest.TestCase):
bufs0
.
append
(
c0
.
compress
(
data0
))
bufs0
.
append
(
c0
.
flush
())
s0
=
''
.
join
(
bufs0
)
s0
=
b
''
.
join
(
bufs0
)
bufs1
.
append
(
c1
.
compress
(
data1
))
bufs1
.
append
(
c1
.
flush
())
s1
=
''
.
join
(
bufs1
)
s1
=
b
''
.
join
(
bufs1
)
self
.
assertEqual
(
zlib
.
decompress
(
s0
),
data0
+
data0
)
self
.
assertEqual
(
zlib
.
decompress
(
s1
),
data0
+
data1
)
...
...
@@ -330,10 +330,10 @@ class CompressObjectTestCase(unittest.TestCase):
bufs1
=
bufs0
[:]
bufs0
.
append
(
d0
.
decompress
(
comp
[
32
:]))
s0
=
''
.
join
(
bufs0
)
s0
=
b
''
.
join
(
bufs0
)
bufs1
.
append
(
d1
.
decompress
(
comp
[
32
:]))
s1
=
''
.
join
(
bufs1
)
s1
=
b
''
.
join
(
bufs1
)
self
.
assertEqual
(
s0
,
s1
)
self
.
assertEqual
(
s0
,
data
)
...
...
@@ -353,11 +353,10 @@ def genblock(seed, length, step=1024, generator=random):
randint
=
generator
.
randint
if
length
<
step
or
step
<
2
:
step
=
length
blocks
=
[]
blocks
=
bytes
()
for
i
in
range
(
0
,
length
,
step
):
blocks
.
append
(
''
.
join
([
chr
(
randint
(
0
,
255
))
for
x
in
range
(
step
)]))
return
''
.
join
(
blocks
)[:
length
]
blocks
+=
bytes
(
randint
(
0
,
255
)
for
x
in
range
(
step
))
return
blocks
...
...
@@ -370,7 +369,7 @@ def choose_lines(source, number, seed=None, generator=random):
HAMLET_SCENE
=
"""
HAMLET_SCENE
=
b
"""
LAERTES
O, fear me not.
...
...
@@ -444,4 +443,5 @@ def test_main():
)
if
__name__
==
"__main__"
:
test_main
()
unittest
.
main
()
# XXX
###test_main()
Modules/zlibmodule.c
View file @
776152b6
...
...
@@ -96,12 +96,12 @@ newcompobject(PyTypeObject *type)
if
(
self
==
NULL
)
return
NULL
;
self
->
is_initialised
=
0
;
self
->
unused_data
=
Py
String_FromString
(
""
);
self
->
unused_data
=
Py
Bytes_FromStringAndSize
(
""
,
0
);
if
(
self
->
unused_data
==
NULL
)
{
Py_DECREF
(
self
);
return
NULL
;
}
self
->
unconsumed_tail
=
Py
String_FromString
(
""
);
self
->
unconsumed_tail
=
Py
Bytes_FromStringAndSize
(
""
,
0
);
if
(
self
->
unconsumed_tail
==
NULL
)
{
Py_DECREF
(
self
);
return
NULL
;
...
...
@@ -174,8 +174,8 @@ PyZlib_compress(PyObject *self, PyObject *args)
err
=
deflateEnd
(
&
zst
);
if
(
err
==
Z_OK
)
ReturnVal
=
Py
String
_FromStringAndSize
((
char
*
)
output
,
zst
.
total_out
);
ReturnVal
=
Py
Bytes
_FromStringAndSize
((
char
*
)
output
,
zst
.
total_out
);
else
zlib_error
(
zst
,
err
,
"while finishing compression"
);
...
...
@@ -210,12 +210,12 @@ PyZlib_decompress(PyObject *self, PyObject *args)
zst
.
avail_in
=
length
;
zst
.
avail_out
=
r_strlen
;
if
(
!
(
result_str
=
Py
String
_FromStringAndSize
(
NULL
,
r_strlen
)))
if
(
!
(
result_str
=
Py
Bytes
_FromStringAndSize
(
NULL
,
r_strlen
)))
return
NULL
;
zst
.
zalloc
=
(
alloc_func
)
NULL
;
zst
.
zfree
=
(
free_func
)
Z_NULL
;
zst
.
next_out
=
(
Byte
*
)
Py
String
_AS_STRING
(
result_str
);
zst
.
next_out
=
(
Byte
*
)
Py
Bytes
_AS_STRING
(
result_str
);
zst
.
next_in
=
(
Byte
*
)
input
;
err
=
inflateInit2
(
&
zst
,
wsize
);
...
...
@@ -255,12 +255,12 @@ PyZlib_decompress(PyObject *self, PyObject *args)
/* fall through */
case
(
Z_OK
):
/* need more memory */
if
(
_PyString_Resize
(
&
result_str
,
r_strlen
<<
1
)
<
0
)
{
if
(
PyBytes_Resize
(
result_str
,
r_strlen
<<
1
)
<
0
)
{
inflateEnd
(
&
zst
);
goto
error
;
}
zst
.
next_out
=
(
unsigned
char
*
)
PyString_AS_STRING
(
result_str
)
\
+
r_strlen
;
zst
.
next_out
=
(
unsigned
char
*
)
PyBytes_AS_STRING
(
result_str
)
+
r_strlen
;
zst
.
avail_out
=
r_strlen
;
r_strlen
=
r_strlen
<<
1
;
break
;
...
...
@@ -277,7 +277,9 @@ PyZlib_decompress(PyObject *self, PyObject *args)
goto
error
;
}
_PyString_Resize
(
&
result_str
,
zst
.
total_out
);
if
(
PyBytes_Resize
(
result_str
,
zst
.
total_out
)
<
0
)
goto
error
;
return
result_str
;
error:
...
...
@@ -399,7 +401,7 @@ PyZlib_objcompress(compobject *self, PyObject *args)
if
(
!
PyArg_ParseTuple
(
args
,
"s#:compress"
,
&
input
,
&
inplen
))
return
NULL
;
if
(
!
(
RetVal
=
Py
String
_FromStringAndSize
(
NULL
,
length
)))
if
(
!
(
RetVal
=
Py
Bytes
_FromStringAndSize
(
NULL
,
length
)))
return
NULL
;
ENTER_ZLIB
...
...
@@ -408,7 +410,7 @@ PyZlib_objcompress(compobject *self, PyObject *args)
self
->
zst
.
avail_in
=
inplen
;
self
->
zst
.
next_in
=
input
;
self
->
zst
.
avail_out
=
length
;
self
->
zst
.
next_out
=
(
unsigned
char
*
)
Py
String
_AS_STRING
(
RetVal
);
self
->
zst
.
next_out
=
(
unsigned
char
*
)
Py
Bytes
_AS_STRING
(
RetVal
);
Py_BEGIN_ALLOW_THREADS
err
=
deflate
(
&
(
self
->
zst
),
Z_NO_FLUSH
);
...
...
@@ -417,10 +419,13 @@ PyZlib_objcompress(compobject *self, PyObject *args)
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while
(
err
==
Z_OK
&&
self
->
zst
.
avail_out
==
0
)
{
if
(
_PyString_Resize
(
&
RetVal
,
length
<<
1
)
<
0
)
if
(
PyBytes_Resize
(
RetVal
,
length
<<
1
)
<
0
)
{
Py_DECREF
(
RetVal
);
RetVal
=
NULL
;
goto
error
;
self
->
zst
.
next_out
=
(
unsigned
char
*
)
PyString_AS_STRING
(
RetVal
)
\
+
length
;
}
self
->
zst
.
next_out
=
(
unsigned
char
*
)
PyBytes_AS_STRING
(
RetVal
)
+
length
;
self
->
zst
.
avail_out
=
length
;
length
=
length
<<
1
;
...
...
@@ -439,7 +444,10 @@ PyZlib_objcompress(compobject *self, PyObject *args)
RetVal
=
NULL
;
goto
error
;
}
_PyString_Resize
(
&
RetVal
,
self
->
zst
.
total_out
-
start_total_out
);
if
(
PyBytes_Resize
(
RetVal
,
self
->
zst
.
total_out
-
start_total_out
)
<
0
)
{
Py_DECREF
(
RetVal
);
RetVal
=
NULL
;
}
error:
LEAVE_ZLIB
...
...
@@ -478,7 +486,7 @@ PyZlib_objdecompress(compobject *self, PyObject *args)
/* limit amount of data allocated to max_length */
if
(
max_length
&&
length
>
max_length
)
length
=
max_length
;
if
(
!
(
RetVal
=
Py
String
_FromStringAndSize
(
NULL
,
length
)))
if
(
!
(
RetVal
=
Py
Bytes
_FromStringAndSize
(
NULL
,
length
)))
return
NULL
;
ENTER_ZLIB
...
...
@@ -487,7 +495,7 @@ PyZlib_objdecompress(compobject *self, PyObject *args)
self
->
zst
.
avail_in
=
inplen
;
self
->
zst
.
next_in
=
input
;
self
->
zst
.
avail_out
=
length
;
self
->
zst
.
next_out
=
(
unsigned
char
*
)
Py
String
_AS_STRING
(
RetVal
);
self
->
zst
.
next_out
=
(
unsigned
char
*
)
Py
Bytes
_AS_STRING
(
RetVal
);
Py_BEGIN_ALLOW_THREADS
err
=
inflate
(
&
(
self
->
zst
),
Z_SYNC_FLUSH
);
...
...
@@ -509,10 +517,13 @@ PyZlib_objdecompress(compobject *self, PyObject *args)
if
(
max_length
&&
length
>
max_length
)
length
=
max_length
;
if
(
_PyString_Resize
(
&
RetVal
,
length
)
<
0
)
if
(
PyBytes_Resize
(
RetVal
,
length
)
<
0
)
{
Py_DECREF
(
RetVal
);
RetVal
=
NULL
;
goto
error
;
self
->
zst
.
next_out
=
(
unsigned
char
*
)
PyString_AS_STRING
(
RetVal
)
\
+
old_length
;
}
self
->
zst
.
next_out
=
(
unsigned
char
*
)
PyBytes_AS_STRING
(
RetVal
)
+
old_length
;
self
->
zst
.
avail_out
=
length
-
old_length
;
Py_BEGIN_ALLOW_THREADS
...
...
@@ -524,7 +535,7 @@ PyZlib_objdecompress(compobject *self, PyObject *args)
of specified size. Return the unconsumed tail in an attribute.*/
if
(
max_length
)
{
Py_DECREF
(
self
->
unconsumed_tail
);
self
->
unconsumed_tail
=
Py
String
_FromStringAndSize
((
char
*
)
self
->
zst
.
next_in
,
self
->
unconsumed_tail
=
Py
Bytes
_FromStringAndSize
((
char
*
)
self
->
zst
.
next_in
,
self
->
zst
.
avail_in
);
if
(
!
self
->
unconsumed_tail
)
{
Py_DECREF
(
RetVal
);
...
...
@@ -541,7 +552,7 @@ PyZlib_objdecompress(compobject *self, PyObject *args)
*/
if
(
err
==
Z_STREAM_END
)
{
Py_XDECREF
(
self
->
unused_data
);
/* Free original empty string */
self
->
unused_data
=
Py
String
_FromStringAndSize
(
self
->
unused_data
=
Py
Bytes
_FromStringAndSize
(
(
char
*
)
self
->
zst
.
next_in
,
self
->
zst
.
avail_in
);
if
(
self
->
unused_data
==
NULL
)
{
Py_DECREF
(
RetVal
);
...
...
@@ -558,7 +569,10 @@ PyZlib_objdecompress(compobject *self, PyObject *args)
goto
error
;
}
_PyString_Resize
(
&
RetVal
,
self
->
zst
.
total_out
-
start_total_out
);
if
(
PyBytes_Resize
(
RetVal
,
self
->
zst
.
total_out
-
start_total_out
)
<
0
)
{
Py_DECREF
(
RetVal
);
RetVal
=
NULL
;
}
error:
LEAVE_ZLIB
...
...
@@ -588,10 +602,10 @@ PyZlib_flush(compobject *self, PyObject *args)
/* Flushing with Z_NO_FLUSH is a no-op, so there's no point in
doing any work at all; just return an empty string. */
if
(
flushmode
==
Z_NO_FLUSH
)
{
return
Py
String
_FromStringAndSize
(
NULL
,
0
);
return
Py
Bytes
_FromStringAndSize
(
NULL
,
0
);
}
if
(
!
(
RetVal
=
Py
String
_FromStringAndSize
(
NULL
,
length
)))
if
(
!
(
RetVal
=
Py
Bytes
_FromStringAndSize
(
NULL
,
length
)))
return
NULL
;
ENTER_ZLIB
...
...
@@ -599,7 +613,7 @@ PyZlib_flush(compobject *self, PyObject *args)
start_total_out
=
self
->
zst
.
total_out
;
self
->
zst
.
avail_in
=
0
;
self
->
zst
.
avail_out
=
length
;
self
->
zst
.
next_out
=
(
unsigned
char
*
)
Py
String
_AS_STRING
(
RetVal
);
self
->
zst
.
next_out
=
(
unsigned
char
*
)
Py
Bytes
_AS_STRING
(
RetVal
);
Py_BEGIN_ALLOW_THREADS
err
=
deflate
(
&
(
self
->
zst
),
flushmode
);
...
...
@@ -608,10 +622,13 @@ PyZlib_flush(compobject *self, PyObject *args)
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while
(
err
==
Z_OK
&&
self
->
zst
.
avail_out
==
0
)
{
if
(
_PyString_Resize
(
&
RetVal
,
length
<<
1
)
<
0
)
if
(
PyBytes_Resize
(
RetVal
,
length
<<
1
)
<
0
)
{
Py_DECREF
(
RetVal
);
RetVal
=
NULL
;
goto
error
;
self
->
zst
.
next_out
=
(
unsigned
char
*
)
PyString_AS_STRING
(
RetVal
)
\
+
length
;
}
self
->
zst
.
next_out
=
(
unsigned
char
*
)
PyBytes_AS_STRING
(
RetVal
)
+
length
;
self
->
zst
.
avail_out
=
length
;
length
=
length
<<
1
;
...
...
@@ -645,7 +662,10 @@ PyZlib_flush(compobject *self, PyObject *args)
goto
error
;
}
_PyString_Resize
(
&
RetVal
,
self
->
zst
.
total_out
-
start_total_out
);
if
(
PyBytes_Resize
(
RetVal
,
self
->
zst
.
total_out
-
start_total_out
)
<
0
)
{
Py_DECREF
(
RetVal
);
RetVal
=
NULL
;
}
error:
LEAVE_ZLIB
...
...
@@ -773,7 +793,7 @@ PyZlib_unflush(compobject *self, PyObject *args)
if
(
!
PyArg_ParseTuple
(
args
,
"|i:flush"
,
&
length
))
return
NULL
;
if
(
!
(
retval
=
Py
String
_FromStringAndSize
(
NULL
,
length
)))
if
(
!
(
retval
=
Py
Bytes
_FromStringAndSize
(
NULL
,
length
)))
return
NULL
;
...
...
@@ -781,7 +801,7 @@ PyZlib_unflush(compobject *self, PyObject *args)
start_total_out
=
self
->
zst
.
total_out
;
self
->
zst
.
avail_out
=
length
;
self
->
zst
.
next_out
=
(
Byte
*
)
Py
String
_AS_STRING
(
retval
);
self
->
zst
.
next_out
=
(
Byte
*
)
Py
Bytes
_AS_STRING
(
retval
);
Py_BEGIN_ALLOW_THREADS
err
=
inflate
(
&
(
self
->
zst
),
Z_FINISH
);
...
...
@@ -790,9 +810,12 @@ PyZlib_unflush(compobject *self, PyObject *args)
/* while Z_OK and the output buffer is full, there might be more output,
so extend the output buffer and try again */
while
((
err
==
Z_OK
||
err
==
Z_BUF_ERROR
)
&&
self
->
zst
.
avail_out
==
0
)
{
if
(
_PyString_Resize
(
&
retval
,
length
<<
1
)
<
0
)
if
(
PyBytes_Resize
(
retval
,
length
<<
1
)
<
0
)
{
Py_DECREF
(
retval
);
retval
=
NULL
;
goto
error
;
self
->
zst
.
next_out
=
(
Byte
*
)
PyString_AS_STRING
(
retval
)
+
length
;
}
self
->
zst
.
next_out
=
(
Byte
*
)
PyBytes_AS_STRING
(
retval
)
+
length
;
self
->
zst
.
avail_out
=
length
;
length
=
length
<<
1
;
...
...
@@ -814,7 +837,10 @@ PyZlib_unflush(compobject *self, PyObject *args)
goto
error
;
}
}
_PyString_Resize
(
&
retval
,
self
->
zst
.
total_out
-
start_total_out
);
if
(
PyBytes_Resize
(
retval
,
self
->
zst
.
total_out
-
start_total_out
)
<
0
)
{
Py_DECREF
(
retval
);
retval
=
NULL
;
}
error:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment