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
72d9b2be
Commit
72d9b2be
authored
Feb 26, 2018
by
Joffrey F
Committed by
Serhiy Storchaka
Feb 27, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bpo-32713: Fix tarfile.itn for large/negative float values. (GH-5434)
parent
eee72d47
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
11 additions
and
1 deletion
+11
-1
Lib/tarfile.py
Lib/tarfile.py
+2
-1
Lib/test/test_tarfile.py
Lib/test/test_tarfile.py
+8
-0
Misc/NEWS.d/next/Library/2018-02-26-13-16-36.bpo-32713.55yegW.rst
...S.d/next/Library/2018-02-26-13-16-36.bpo-32713.55yegW.rst
+1
-0
No files found.
Lib/tarfile.py
View file @
72d9b2be
...
...
@@ -200,8 +200,9 @@ def itn(n, digits=8, format=DEFAULT_FORMAT):
# base-256 representation. This allows values up to (256**(digits-1))-1.
# A 0o200 byte indicates a positive number, a 0o377 byte a negative
# number.
n
=
int
(
n
)
if
0
<=
n
<
8
**
(
digits
-
1
):
s
=
bytes
(
"%0*o"
%
(
digits
-
1
,
int
(
n
)
),
"ascii"
)
+
NUL
s
=
bytes
(
"%0*o"
%
(
digits
-
1
,
n
),
"ascii"
)
+
NUL
elif
format
==
GNU_FORMAT
and
-
256
**
(
digits
-
1
)
<=
n
<
256
**
(
digits
-
1
):
if
n
>=
0
:
s
=
bytearray
([
0o200
])
...
...
Lib/test/test_tarfile.py
View file @
72d9b2be
...
...
@@ -2149,6 +2149,14 @@ class MiscTest(unittest.TestCase):
self
.
assertEqual
(
tarfile
.
itn
(
-
0x100000000000000
),
b"
\
xff
\
x00
\
x00
\
x00
\
x00
\
x00
\
x00
\
x00
"
)
# Issue 32713: Test if itn() supports float values outside the
# non-GNU format range
self
.
assertEqual
(
tarfile
.
itn
(
-
100.0
,
format
=
tarfile
.
GNU_FORMAT
),
b"
\
xff
\
xff
\
xff
\
xff
\
xff
\
xff
\
xff
\
x9c
"
)
self
.
assertEqual
(
tarfile
.
itn
(
8
**
12
+
0.0
,
format
=
tarfile
.
GNU_FORMAT
),
b"
\
x80
\
x00
\
x00
\
x10
\
x00
\
x00
\
x00
\
x00
"
)
self
.
assertEqual
(
tarfile
.
nti
(
tarfile
.
itn
(
-
0.1
,
format
=
tarfile
.
GNU_FORMAT
)),
0
)
def
test_number_field_limits
(
self
):
with
self
.
assertRaises
(
ValueError
):
tarfile
.
itn
(
-
1
,
8
,
tarfile
.
USTAR_FORMAT
)
...
...
Misc/NEWS.d/next/Library/2018-02-26-13-16-36.bpo-32713.55yegW.rst
0 → 100644
View file @
72d9b2be
Fixed tarfile.itn handling of out-of-bounds float values. Patch by Joffrey Fuhrer.
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