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
69fdbf9c
Commit
69fdbf9c
authored
Jan 09, 2014
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issue #20078: Reading malformed zipfiles no longer hangs with 100% CPU
consumption.
parents
0ae7ae1f
5ce3f10a
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
36 additions
and
0 deletions
+36
-0
Lib/test/test_zipfile.py
Lib/test/test_zipfile.py
+31
-0
Lib/zipfile.py
Lib/zipfile.py
+2
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/test/test_zipfile.py
View file @
69fdbf9c
...
...
@@ -297,6 +297,36 @@ class AbstractTestsWithSourceFile:
buf
=
fp
.
read
(
test_size
)
self
.
assertEqual
(
len
(
buf
),
test_size
)
def
test_truncated_zipfile
(
self
):
fp
=
io
.
BytesIO
()
with
zipfile
.
ZipFile
(
fp
,
mode
=
'w'
)
as
zipf
:
zipf
.
writestr
(
'strfile'
,
self
.
data
,
compress_type
=
self
.
compression
)
end_offset
=
fp
.
tell
()
zipfiledata
=
fp
.
getvalue
()
fp
=
io
.
BytesIO
(
zipfiledata
)
with
zipfile
.
ZipFile
(
fp
)
as
zipf
:
with
zipf
.
open
(
'strfile'
)
as
zipopen
:
fp
.
truncate
(
end_offset
-
20
)
with
self
.
assertRaises
(
EOFError
):
zipopen
.
read
()
fp
=
io
.
BytesIO
(
zipfiledata
)
with
zipfile
.
ZipFile
(
fp
)
as
zipf
:
with
zipf
.
open
(
'strfile'
)
as
zipopen
:
fp
.
truncate
(
end_offset
-
20
)
with
self
.
assertRaises
(
EOFError
):
while
zipopen
.
read
(
100
):
pass
fp
=
io
.
BytesIO
(
zipfiledata
)
with
zipfile
.
ZipFile
(
fp
)
as
zipf
:
with
zipf
.
open
(
'strfile'
)
as
zipopen
:
fp
.
truncate
(
end_offset
-
20
)
with
self
.
assertRaises
(
EOFError
):
while
zipopen
.
read1
(
100
):
pass
def
tearDown
(
self
):
unlink
(
TESTFN
)
unlink
(
TESTFN2
)
...
...
@@ -393,6 +423,7 @@ class StoredTestsWithSourceFile(AbstractTestsWithSourceFile,
with
zipfile
.
ZipFile
(
TESTFN2
,
"w"
)
as
zipfp
:
self
.
assertRaises
(
ValueError
,
zipfp
.
write
,
TESTFN
)
@
requires_zlib
class
DeflateTestsWithSourceFile
(
AbstractTestsWithSourceFile
,
unittest
.
TestCase
):
...
...
Lib/zipfile.py
View file @
69fdbf9c
...
...
@@ -862,6 +862,8 @@ class ZipExtFile(io.BufferedIOBase):
data
=
self
.
_fileobj
.
read
(
n
)
self
.
_compress_left
-=
len
(
data
)
if
not
data
:
raise
EOFError
if
self
.
_decrypter
is
not
None
:
data
=
bytes
(
map
(
self
.
_decrypter
,
data
))
...
...
Misc/NEWS
View file @
69fdbf9c
...
...
@@ -18,6 +18,9 @@ Core and Builtins
Library
-------
-
Issue
#
20078
:
Reading
malformed
zipfiles
no
longer
hangs
with
100
%
CPU
consumption
.
-
Issue
#
20113
:
os
.
readv
()
and
os
.
writev
()
now
raise
an
OSError
exception
on
error
instead
of
returning
-
1.
...
...
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