]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-152849: Fix `OverflowError` message for out-of-range timestamps in the `time`...
authortonghuaroot (童话) <tonghuaroot@gmail.com>
Mon, 6 Jul 2026 14:50:15 +0000 (22:50 +0800)
committerGitHub <noreply@github.com>
Mon, 6 Jul 2026 14:50:15 +0000 (16:50 +0200)
Co-authored-by: Stan Ulbrych <stan@python.org>
Lib/test/test_time.py
Misc/NEWS.d/next/Library/2026-07-02-13-30-00.gh-issue-152849.K9dRvP.rst [new file with mode: 0644]
Python/pytime.c

index 1850f053aaffd66416766c88a9baf3abb2221180..985984b55123ce6669467d09ad1b8f9adb9f709c 100644 (file)
@@ -1013,6 +1013,17 @@ class TestCPyTime(CPyTimeTestCase, unittest.TestCase):
             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 (file)
index 0000000..053a5df
--- /dev/null
@@ -0,0 +1,2 @@
+Out-of-range float and integer timestamps now raise :exc:`OverflowError`
+with the same message. Patch by tonghuaroot.
index 399ff59ad01ab6940af4fa31b185d855e1942ac8..53c82736137a16b5cf97dc323b1e685c2dffaa45 100644 (file)
@@ -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;
     }