Thanks to visit codestin.com
Credit goes to github.com

Skip to content

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
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

adang1345
Copy link
Contributor

@adang1345 adang1345 commented May 19, 2025

If the system clock is set so that time.time() falls outside of the range 0 through 2**32-1, then creation of a GZIP-compressed file using gzip.GzipFile() would fail with the exception struct.error: 'L' format requires 0 <= number <= 4294967295. Fix this error.

If the mtime argument to gzip.GzipFile() is explicitly set to an out-of-range value, then the behavior is unchanged, and we continue raising the exception.


📚 Documentation preview 📚: https://cpython-previews--134278.org.readthedocs.build/

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.

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.

Comment on lines +191 to +195
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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ditto, see previous comment

@@ -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.

Choose a reason for hiding this comment

The 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 mtime has changed

Copy link
Member

@serhiy-storchaka serhiy-storchaka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test also for 2**32-0.1.

I do not think that raising ValueError in the GzipFile constructor is right. This does not solve the problem of the user passing stat().st_mtime or time.time().

There is other occurrence of this problem in compress().

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants