-
-
Notifications
You must be signed in to change notification settings - Fork 32.2k
gh-133998: Fix gzip file creation when time is out of range #134278
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
adang1345
wants to merge
7
commits into
python:main
Choose a base branch
from
adang1345:fix-gzip-mtime
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
64681af
gh-133998: Fix gzip file creation when time is out of range
adang1345 3241cf2
📜🤖 Added by blurb_it.
blurb-it[bot] 79d8a72
Remove extra newline
adang1345 e701310
Address review comments regarding documentation
adang1345 90a881b
Keep docstring in line with documentation
adang1345 9638ca0
Improve error message when mtime is out of range
adang1345 20da98a
Re-format changelog message
adang1345 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -188,8 +188,11 @@ def __init__(self, filename=None, mode=None, | |
|
||
The optional mtime argument is the timestamp requested by gzip. The time | ||
is in Unix format, i.e., seconds since 00:00:00 UTC, January 1, 1970. | ||
If mtime is omitted or None, the current time is used. Use mtime = 0 | ||
to generate a compressed stream that does not depend on creation time. | ||
Set mtime to 0 to generate a compressed stream that does not depend on | ||
creation time. If mtime is omitted or None, the current time is used; | ||
however, if the current time is outside the range 00:00:00 UTC, January | ||
1, 1970 through 06:28:15 UTC, February 7, 2106, then the value 0 is used | ||
instead. | ||
Comment on lines
+191
to
+195
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ditto, see previous comment |
||
|
||
""" | ||
|
||
|
@@ -203,6 +206,9 @@ def __init__(self, filename=None, mode=None, | |
if mode and 'b' not in mode: | ||
mode += 'b' | ||
|
||
if mtime is not None and (mtime < 0 or mtime >= 2**32): | ||
raise ValueError(f'mtime must be in the range 0 through {2**32-1}') | ||
|
||
try: | ||
if fileobj is None: | ||
fileobj = self.myfileobj = builtins.open(filename, mode or 'rb') | ||
|
@@ -297,6 +303,8 @@ def _write_gzip_header(self, compresslevel): | |
mtime = self._write_mtime | ||
if mtime is None: | ||
mtime = time.time() | ||
if mtime < 0 or mtime >= 2**32: | ||
mtime = 0 | ||
adang1345 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
write32u(self.fileobj, int(mtime)) | ||
if compresslevel == _COMPRESS_LEVEL_BEST: | ||
xfl = b'\002' | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
Misc/NEWS.d/next/Library/2025-05-19-20-29-35.gh-issue-133998.KmElUw.rst
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Fix ``struct.error`` exception when creating a file with ``gzip.GzipFile()`` if the system time is outside the range 00:00:00 UTC, January 1, 1970 through 06:28:15 UTC, February 7, 2106. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this should also be tweaked since the behaviour of providing an out-of-range |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The docs are slightly wrong now that
GzipFile.__init__
will raise a ValueError if the specified value is out of range.I know you've documented it in the docstring for
__init__
, but I think it's worth clarifying here since we're already in the area.