GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — gh-159739: Preserve large years in time conversions by jelle-openai · Pull Request #160175 · python/cpython

Conversation

@jelle-openai

@jelle-openai jelle-openai commented Oct 22, 2026 •
edited by bedevere-app Bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

The time module added 1900 to the C library year using int arithmetic, which overflowed for timestamps whose calendar year exceeds INT_MAX. On platforms that accept these timestamps, gmtime(), localtime(), and ctime() could report a negative year; perform the addition in a wider type. Backport to 3.15 and 3.14.

  • Issue: Fix minor safety issues #159739

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@jelle-openai
pythongh-159739: Preserve large years in time conversions
e2152a1
The time module added 1900 to the C library year using int arithmetic, which overflowed for timestamps whose calendar year exceeds INT_MAX. On platforms that accept these timestamps, gmtime(), localtime(), and ctime() could report a negative year; perform the addition in a wider type. Backport to 3.15 and 3.14.
@jelle-openai
jelle-openai requested review from StanFromIreland and pganssle as code owners October 22, 2026 04:15
@bedevere-app bedevere-app Bot mentioned this pull request Oct 22, 2026
Fix minor safety issues #159739
Open
@bedevere-app bedevere-app Bot added the awaiting review label Oct 22, 2026
StanFromIreland
StanFromIreland reviewed Oct 22, 2026
View reviewed changes
Comment thread Modules/timemodule.c Resolved

Uh oh!

There was an error while loading. Please reload this page.

StanFromIreland
StanFromIreland reviewed Oct 22, 2026
View reviewed changes
Comment thread Modules/timemodule.c Resolved

Uh oh!

There was an error while loading. Please reload this page.

@jelle-openai
pythongh-159739: Round-trip large years and validate datetime timestamps
219bc10
Time tuple consumers parsed calendar years as C int before subtracting 1900, so they rejected valid struct_time results. Date and datetime timestamp conversion could also overflow before reporting the invalid year. Preserve the full time tuple range and report oversized datetime years correctly. Backport to 3.15 and 3.14.
gpshead
gpshead approved these changes Nov 9, 2026
View reviewed changes
@bedevere-app bedevere-app Bot added awaiting merge and removed awaiting review labels Nov 9, 2026
@gpshead
gpshead merged commit e1a4c15 into python:main Nov 9, 2026
60 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot removed the awaiting merge label Nov 9, 2026
@gpshead gpshead added needs backport to 3.14 bugs and security fixes needs backport to 3.15 bugs and security fixes labels Nov 9, 2026
@miss-islington-app

miss-islington-app Bot commented Nov 9, 2026

Copy link
Copy Markdown

Thanks @jelle-openai for the PR, and @gpshead for merging it 🌮🎉.. I'm working now to backport this PR to: 3.14.
🐍🍒⛏🤖

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@miss-islington-app

miss-islington-app Bot commented Nov 9, 2026

Copy link
Copy Markdown

Thanks @jelle-openai for the PR, and @gpshead for merging it 🌮🎉.. I'm working now to backport this PR to: 3.15.
🐍🍒⛏🤖 I'm not a witch! I'm not a witch!

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app

bedevere-app Bot commented Nov 9, 2026

Copy link
Copy Markdown

GH-161648 is a backport of this pull request to the 3.14 branch.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot removed the needs backport to 3.14 bugs and security fixes label Nov 9, 2026
@bedevere-app

bedevere-app Bot commented Nov 9, 2026

Copy link
Copy Markdown

GH-161649 is a backport of this pull request to the 3.15 branch.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 bugs and security fixes label Nov 9, 2026
@StanFromIreland

StanFromIreland commented Nov 9, 2026

Copy link
Copy Markdown
Member

The current fix is incorrect, we've just moved the problem:

>>> import time
>>> time.strftime('%Y', time.gmtime(67_767_976_249_084_800))
'-2147483648'

By widening the accepted year range to INT_MAX + 1900, time.strftime() now passes tm_year values above INT_MAX - 1900 to libc, where glibc's %Y/%G wrap them, so calls that used to raise OverflowError now silently return a negative year.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

This was referenced Nov 9, 2026
[3.14] gh-159739: Preserve large years in time conversions (GH-160175) #161648
Draft
[3.15] gh-159739: Preserve large years in time conversions (GH-160175) #161649
Draft
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@JelleZijlstra JelleZijlstra JelleZijlstra left review comments
@StanFromIreland StanFromIreland StanFromIreland left review comments
@gpshead gpshead gpshead approved these changes
@pganssle pganssle Awaiting requested review from pganssle pganssle is a code owner

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

4 participants

@jelle-openai @StanFromIreland @gpshead @JelleZijlstra
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.