summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2009-09-22 00:29:48 (GMT)
committerBrett Cannon <bcannon@gmail.com>2009-09-22 00:29:48 (GMT)
commit4d94743c28af939864e870f556f8b656fbd3b774 (patch)
tree92d6e417f15caff24e5f2d433fae20701c012068
parent2a46658beef7de998dfcf85ca5e9ddf97f63a8bf (diff)
downloadcpython-4d94743c28af939864e870f556f8b656fbd3b774.zip
cpython-4d94743c28af939864e870f556f8b656fbd3b774.tar.gz
cpython-4d94743c28af939864e870f556f8b656fbd3b774.tar.bz2
When range checking was added to time.strftime() a check was placed on tm_isdst
to make sure it fell within [-1, 1] just in case someone implementing strftime() in libc was stupid enough to assume this. Turns out, though, some OSs (e.g. zOS) are stupid enough to use values outside of this range for time structs created by the system itself. So instead of throwing a ValueError, tm_isdst is now normalized before being passed to strftime(). Fixes issue #6823. Thanks Robert Shapiro for diagnosing the problem and contributing an initial patch.
-rw-r--r--Lib/test/test_time.py5
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS4
-rw-r--r--Modules/timemodule.c12
4 files changed, 12 insertions, 10 deletions
diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
index 965f7e2..6683de6 100644
--- a/Lib/test/test_time.py
+++ b/Lib/test/test_time.py
@@ -87,11 +87,6 @@ class TimeTestCase(unittest.TestCase):
(1900, 1, 1, 0, 0, 0, 0, -1, -1))
self.assertRaises(ValueError, time.strftime, '',
(1900, 1, 1, 0, 0, 0, 0, 367, -1))
- # Check daylight savings flag [-1, 1]
- self.assertRaises(ValueError, time.strftime, '',
- (1900, 1, 1, 0, 0, 0, 0, 1, -2))
- self.assertRaises(ValueError, time.strftime, '',
- (1900, 1, 1, 0, 0, 0, 0, 1, 2))
def test_default_values_for_zero(self):
# Make sure that using all zeros uses the proper default values.
diff --git a/Misc/ACKS b/Misc/ACKS
index e0bd435..4889be8 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -669,6 +669,7 @@ Jerry Seutter
Denis Severson
Ian Seyer
Ha Shao
+Richard Shapiro
Bruce Sherwood
Pete Shinners
Michael Shiplett
diff --git a/Misc/NEWS b/Misc/NEWS
index 89cbf3c..15db199 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -1340,6 +1340,10 @@ C-API
Extension Modules
-----------------
+- Issue #6823: Allow time.strftime() to accept a tuple with a isdst field
+ outside of the range of [-1, 1] by normalizing the value to within that
+ range.
+
- Issue #6877: Make it possible to link the readline extension to libedit
on OSX.
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 2f4092d..624405e 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -464,11 +464,13 @@ time_strftime(PyObject *self, PyObject *args)
PyErr_SetString(PyExc_ValueError, "day of year out of range");
return NULL;
}
- if (buf.tm_isdst < -1 || buf.tm_isdst > 1) {
- PyErr_SetString(PyExc_ValueError,
- "daylight savings flag out of range");
- return NULL;
- }
+ /* Normalize tm_isdst just in case someone foolishly implements %Z
+ based on the assumption that tm_isdst falls within the range of
+ [-1, 1] */
+ if (buf.tm_isdst < -1)
+ buf.tm_isdst = -1;
+ else if (buf.tm_isdst > 1)
+ buf.tm_isdst = 1;
#ifdef MS_WINDOWS
/* check that the format string contains only valid directives */