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
5f8f0d67
Commit
5f8f0d67
authored
Oct 21, 2012
by
Nadeem Vawda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #14398: Fix size truncation and overflow bugs in bz2 module.
parent
66510fed
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
217 additions
and
153 deletions
+217
-153
Lib/test/test_bz2.py
Lib/test/test_bz2.py
+39
-1
Lib/test/testbz2_bigmem.bz2
Lib/test/testbz2_bigmem.bz2
+0
-0
Misc/NEWS
Misc/NEWS
+2
-0
Modules/bz2module.c
Modules/bz2module.c
+176
-152
No files found.
Lib/test/test_bz2.py
View file @
5f8f0d67
#!/usr/bin/env python3
from
test
import
support
from
test.support
import
TESTFN
from
test.support
import
TESTFN
,
_4G
,
bigmemtest
,
findfile
import
unittest
from
io
import
BytesIO
...
...
@@ -25,6 +25,9 @@ class BaseTest(unittest.TestCase):
DATA
=
b'BZh91AY&SY.
\
xc8
N
\
x18
\
x00
\
x01
>_
\
x80
\
x00
\
x10
@
\
x02
\
xff
\
xf0
\
x01
\
x07
n
\
x00
?
\
xe7
\
xff
\
xe0
0
\
x01
\
x99
\
xaa
\
x00
\
xc0
\
x03
F
\
x86
\
x8c
#&
\
x83
F
\
x9a
\
x03
\
x06
\
xa6
\
xd0
\
xa6
\
x93
M
\
x0f
Q
\
xa7
\
xa8
\
x06
\
x80
4hh
\
x12
$
\
x11
\
xa4
i4
\
xf1
4S
\
xd2
<Q
\
xb5
\
x0f
H
\
xd3
\
xd4
\
xdd
\
xd5
\
x87
\
xbb
\
xf8
\
x94
\
r
\
x8f
\
xaf
I
\
x12
\
xe1
\
xc9
\
xf8
/E
\
x00
pu
\
x89
\
x12
]
\
xc9
\
xbb
DL
\
n
Q
\
x0e
\
t
1
\
x12
\
xdf
\
xa0
\
xc0
\
x97
\
xac
2O9
\
x89
\
x13
\
x94
\
x0e
\
x1c
7
\
x0e
d
\
x95
I
\
x0c
\
xaa
J
\
xa4
\
x18
L
\
x10
\
x05
#
\
x9c
\
xaf
\
xba
\
xbc
/
\
x97
\
x8a
#C
\
xc8
\
xe1
\
x8c
W
\
xf9
\
xe2
\
xd0
\
xd6
M
\
xa7
\
x8b
Xa<e
\
x84
t
\
xcb
L
\
xb3
\
xa7
\
xd9
\
xcd
\
xd1
\
xcb
\
x84
.
\
xaf
\
xb3
\
xab
\
xab
\
xad
`n}
\
xa0
lh
\
t
E,
\
x8e
Z
\
x15
\
x17
VH>
\
x88
\
xe5
\
xcd
9gd6
\
x0b
\
n
\
xe9
\
x9b
\
xd5
\
x8a
\
x99
\
xf7
\
x08
.K
\
x8e
v
\
xfb
\
xf7
xw
\
xbb
\
xdf
\
xa1
\
x92
\
xf1
\
xdd
|/";
\
xa2
\
xba
\
x9f
\
xd5
\
xb1
#A
\
xb6
\
xf6
\
xb3
o
\
xc9
\
xc5
y
\
\
\
xeb
O
\
xe7
\
x85
\
x9a
\
xbc
\
xb6
f8
\
x95
2
\
xd5
\
xd7
"%
\
x89
>V,
\
xf7
\
xa6
z
\
xe2
\
x9f
\
xa3
\
xdf
\
x11
\
x11
"
\
xd6
E)I
\
xa9
\
x13
^
\
xca
\
xf3
r
\
xd0
\
x03
U
\
x92
2
\
xf2
6
\
xec
\
xb6
\
xed
\
x8b
\
xc3
U
\
x13
\
x9d
\
xc5
\
x17
0
\
xa4
\
xfa
^
\
x92
\
xac
DF
\
x8a
\
x97
\
xd6
\
x19
\
xfe
\
xdd
\
xb8
\
xbd
\
x1a
\
x9a
\
x19
\
xa3
\
x80
ankR
\
x8b
\
xe5
\
xd8
3]
\
xa9
\
xc6
\
x08
\
x82
f
\
xf6
\
xb9
"6l$
\
xb8
j@
\
xc0
\
x8a
\
xb0
l1..
\
xba
k
\
x83
ls
\
x15
\
xbc
\
xf4
\
xc1
\
x13
\
xbe
\
xf8
E
\
xb8
\
x9d
\
r
\
xa8
\
x9d
k
\
x84
\
xd3
n
\
xfa
\
xac
Q
\
x07
\
xb1
%y
\
xaa
v
\
xb4
\
x08
\
xe0
z
\
x1b
\
x16
\
xf5
\
x04
\
xe9
\
xcc
\
xb9
\
x08
z
\
x1e
n7.G
\
xfc
]
\
xc9
\
x14
\
xe1
B@
\
xbb
!8`'
DATA_CRLF
=
b'BZh91AY&SY
\
xae
z
\
xbb
N
\
x00
\
x01
H
\
xdf
\
x80
\
x00
\
x12
@
\
x02
\
xff
\
xf0
\
x01
\
x07
n
\
x00
?
\
xe7
\
xff
\
xe0
@
\
x01
\
xbc
\
xc6
`
\
x86
*
\
x8d
=M
\
xa9
\
x9a
\
x86
\
xd0
L@
\
x0f
I
\
xa6
!
\
xa1
\
x13
\
xc8
\
x88
jdi
\
x8d
@
\
x03
@
\
x1a
\
x1a
\
x0c
\
x0c
\
x83
\
x00
\
xc4
h2
\
x19
\
x01
\
x82
D
\
x84
e
\
t
\
xe8
\
x99
\
x89
\
x19
\
x1a
h
\
x00
\
r
\
x1a
\
x11
\
xaf
\
x9b
\
x0f
G
\
xf5
(
\
x1b
\
x1f
?
\
t
\
x12
\
xcf
\
xb5
\
xfc
\
x95
E
\
x00
ps
\
x89
\
x12
^
\
xa4
\
xdd
\
xa2
&
\
x05
(
\
x87
\
x04
\
x98
\
x89
u
\
xe4
0%
\
xb6
\
x19
\
'
\
x8c
\
xc4
\
x89
\
xca
\
x07
\
x0e
\
x1b
!
\
x91
UIFU%C
\
x99
4!DI
\
xd2
\
xfa
\
xf0
\
xf1
N8W
\
xde
\
x13
A
\
xf5
\
x9c
r%?
\
x9f
3;I45A
\
xd1
\
x8b
T
\
xb1
<l
\
xba
\
xcb
_
\
xc0
0xY
\
x17
r
\
x17
\
x88
\
x08
\
x08
@
\
xa0
\
r
y@
\
x10
\
x04
$)`
\
xf2
\
xce
\
x89
z
\
xb0
s
\
xec
\
x9b
.iW
\
x9d
\
x81
\
xb5
-+t
\
x9f
\
x1a
\
'
\
x97
dB
\
xf5
x
\
xb5
\
xbe
.[.
\
xd7
\
x0e
\
x81
\
xe7
\
x08
\
x1c
N`
\
x88
\
x10
\
xca
\
x87
\
xc3
!"
\
x80
\
x92
R
\
xa1
/
\
xd1
\
xc0
\
xe6
mf
\
xac
\
xbd
\
x99
\
xcc
a
\
xb3
\
x87
80>
\
xa4
\
xc7
\
x8d
\
x1a
\
\
"
\
xad
\
xa1
\
xab
yBg
\
x15
\
xb9
l
\
x88
\
x88
\
x91
k"
\
x94
\
xa4
\
xd4
\
x89
\
xae
*
\
xa6
\
x0b
\
x10
\
x0c
\
xd6
\
xd4
m
\
xe8
6
\
xec
\
xb5
j
\
x8a
\
x86
j
\
'
;
\
xca
.
\
x01
I
\
xf2
\
xaa
J
\
xe8
\
x88
\
x8c
U+t3
\
xfb
\
x0c
\
n
\
xa3
3
\
x13
r2
\
r
\
x16
\
xe0
\
xb3
(
\
xbf
\
x1d
\
x83
r
\
xe7
M
\
xf0
D
\
x13
65
\
xd8
\
x88
\
xd3
\
xa4
\
x92
\
xcb
2
\
x06
\
x04
\
\
\
xc1
\
xb0
\
xea
//
\
xbe
k&
\
xd8
\
xe6
+t
\
xe5
\
xa1
\
x13
\
xad
a
\
x16
\
xde
r5"w]
\
xa2
i
\
xb7
[
\
x97
R
\
xe2
IT
\
xcd
;Z
\
x04
dk4
\
xad
\
x8a
\
t
\
xd3
\
x81
z
\
x10
\
xf1
:^`
\
xab
\
x1f
\
xc5
\
xdc
\
x91
N
\
x14
$+
\
x9e
\
xae
\
xd3
\
x80
'
with
open
(
findfile
(
"testbz2_bigmem.bz2"
),
"rb"
)
as
f
:
DATA_BIGMEM
=
f
.
read
()
if
has_cmdline_bunzip2
:
def
decompress
(
self
,
data
):
pop
=
subprocess
.
Popen
(
"bunzip2"
,
shell
=
True
,
...
...
@@ -44,6 +47,7 @@ class BaseTest(unittest.TestCase):
def
decompress
(
self
,
data
):
return
bz2
.
decompress
(
data
)
class
BZ2FileTest
(
BaseTest
):
"Test BZ2File type miscellaneous methods."
...
...
@@ -313,6 +317,17 @@ class BZ2CompressorTest(BaseTest):
data
+=
bz2c
.
flush
()
self
.
assertEqual
(
self
.
decompress
(
data
),
self
.
TEXT
)
@
bigmemtest
(
size
=
_4G
,
memuse
=
1.25
)
def
testBigmem
(
self
,
size
):
text
=
b"a"
*
size
bz2c
=
bz2
.
BZ2Compressor
()
data
=
bz2c
.
compress
(
text
)
+
bz2c
.
flush
()
del
text
text
=
self
.
decompress
(
data
)
self
.
assertEqual
(
len
(
text
),
size
)
self
.
assertEqual
(
text
.
strip
(
b"a"
),
b""
)
class
BZ2DecompressorTest
(
BaseTest
):
def
test_Constructor
(
self
):
self
.
assertRaises
(
TypeError
,
BZ2Decompressor
,
42
)
...
...
@@ -351,6 +366,13 @@ class BZ2DecompressorTest(BaseTest):
text
=
bz2d
.
decompress
(
self
.
DATA
)
self
.
assertRaises
(
EOFError
,
bz2d
.
decompress
,
b"anything"
)
@
bigmemtest
(
size
=
_4G
,
memuse
=
1.25
,
dry_run
=
False
)
def
testBigmem
(
self
,
unused_size
):
# Issue #14398: decompression fails when output data is >=2GB.
text
=
bz2
.
BZ2Decompressor
().
decompress
(
self
.
DATA_BIGMEM
)
self
.
assertEqual
(
len
(
text
),
_4G
)
self
.
assertEqual
(
text
.
strip
(
b"
\
0
"
),
b""
)
class
FuncTest
(
BaseTest
):
"Test module functions"
...
...
@@ -374,6 +396,22 @@ class FuncTest(BaseTest):
# "Test decompress() function with incomplete data"
self
.
assertRaises
(
ValueError
,
bz2
.
decompress
,
self
.
DATA
[:
-
10
])
@
bigmemtest
(
size
=
_4G
,
memuse
=
1.25
)
def
testCompressBigmem
(
self
,
size
):
text
=
b"a"
*
size
data
=
bz2
.
compress
(
text
)
del
text
text
=
self
.
decompress
(
data
)
self
.
assertEqual
(
len
(
text
),
size
)
self
.
assertEqual
(
text
.
strip
(
b"a"
),
b""
)
@
bigmemtest
(
size
=
_4G
,
memuse
=
1.25
,
dry_run
=
False
)
def
testDecompressBigmem
(
self
,
unused_size
):
# Issue #14398: decompression fails when output data is >=2GB.
text
=
bz2
.
decompress
(
self
.
DATA_BIGMEM
)
self
.
assertEqual
(
len
(
text
),
_4G
)
self
.
assertEqual
(
text
.
strip
(
b"
\
0
"
),
b""
)
def
test_main
():
support
.
run_unittest
(
BZ2FileTest
,
...
...
Lib/test/testbz2_bigmem.bz2
0 → 100644
View file @
5f8f0d67
File added
Misc/NEWS
View file @
5f8f0d67
...
...
@@ -132,6 +132,8 @@ Core and Builtins
Library
-------
- Issue #14398: Fix size truncation and overflow bugs in the bz2 module.
- Issue #16220: wsgiref now always calls close() on an iterable response.
Patch by Brent Tubbs.
...
...
Modules/bz2module.c
View file @
5f8f0d67
This diff is collapsed.
Click to expand it.
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