https://github.com/python/cpython/commit/2d7a74ece7884c9a5f52cc6ac38a6e7ee691b26c
commit: 2d7a74ece7884c9a5f52cc6ac38a6e7ee691b26c
branch: main
author: tonghuaroot (童话) <[email protected]>
committer: StanFromIreland <[email protected]>
date: 2026-07-06T16:50:15+02:00
summary:

gh-152849: Fix `OverflowError` message for out-of-range timestamps in the 
`time` module (#152850)

Co-authored-by: Stan Ulbrych <[email protected]>

files:
A Misc/NEWS.d/next/Library/2026-07-02-13-30-00.gh-issue-152849.K9dRvP.rst
M Lib/test/test_time.py
M Python/pytime.c

diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
index 1850f053aaffd6..985984b55123ce 100644
--- a/Lib/test/test_time.py
+++ b/Lib/test/test_time.py
@@ -1013,6 +1013,17 @@ def test_FromSecondsObject(self):
             with self.assertRaises(ValueError):
                 _PyTime_FromSecondsObject(float('nan'), time_rnd)
 
+    def test_FromSecondsObject_float_overflow_message(self):
+        # Float path must report a PyTime_t overflow, like the integer path.
+        from _testinternalcapi import _PyTime_FromSecondsObject
+        for value in (PyTime_MAX, PyTime_MIN):
+            for time_rnd, _ in ROUNDING_MODES:
+                with self.subTest(value=value, time_rnd=time_rnd):
+                    with self.assertRaisesRegex(
+                            OverflowError,
+                            "timestamp out of range for C PyTime_t"):
+                        _PyTime_FromSecondsObject(value, time_rnd)
+
     def test_AsSecondsDouble(self):
         from _testcapi import PyTime_AsSecondsDouble
 
diff --git 
a/Misc/NEWS.d/next/Library/2026-07-02-13-30-00.gh-issue-152849.K9dRvP.rst 
b/Misc/NEWS.d/next/Library/2026-07-02-13-30-00.gh-issue-152849.K9dRvP.rst
new file mode 100644
index 00000000000000..053a5dfea3f3ff
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-07-02-13-30-00.gh-issue-152849.K9dRvP.rst
@@ -0,0 +1,2 @@
+Out-of-range float and integer timestamps now raise :exc:`OverflowError`
+with the same message. Patch by tonghuaroot.
diff --git a/Python/pytime.c b/Python/pytime.c
index 399ff59ad01ab6..53c82736137a16 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -107,7 +107,7 @@ static void
 pytime_overflow(void)
 {
     PyErr_SetString(PyExc_OverflowError,
-                    "timestamp too large to convert to C PyTime_t");
+                    "timestamp out of range for C PyTime_t");
 }
 
 
@@ -636,7 +636,7 @@ pytime_from_double(PyTime_t *tp, double value, 
_PyTime_round_t round,
 
     /* See comments in pytime_double_to_denominator */
     if (!((double)PyTime_MIN <= d && d < -(double)PyTime_MIN)) {
-        pytime_time_t_overflow();
+        pytime_overflow();
         *tp = 0;
         return -1;
     }

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to