]> granicus.if.org Git - python/commitdiff
Merged revisions 77122 via svnmerge from
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 29 Dec 2009 22:39:49 +0000 (22:39 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Tue, 29 Dec 2009 22:39:49 +0000 (22:39 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r77122 | amaury.forgeotdarc | 2009-12-29 23:03:38 +0100 (mar., 29 déc. 2009) | 3 lines

  #7413: Passing '\0' as the separator to datetime.datetime.isoformat()
  used to drop the time part of the result.
........

Lib/test/test_datetime.py
Misc/NEWS
Modules/datetimemodule.c

index 24ec895cf49d172d1d723622fdf9638db1d07c29..dbd2f8f0e51eb4fea1b8216bf1d6a6e0e7cee6cb 100644 (file)
@@ -1173,6 +1173,7 @@ class TestDateTime(TestDate):
         self.assertEqual(t.isoformat(),    "0002-03-02T04:05:01.000123")
         self.assertEqual(t.isoformat('T'), "0002-03-02T04:05:01.000123")
         self.assertEqual(t.isoformat(' '), "0002-03-02 04:05:01.000123")
+        self.assertEqual(t.isoformat('\x00'), "0002-03-02\x0004:05:01.000123")
         # str is ISO format with the separator forced to a blank.
         self.assertEqual(str(t), "0002-03-02 04:05:01.000123")
 
index 234e55af8a90c5eba98afef409baa2b37cfa96eb..7e7b060515c799608484128fb43a734921da1830 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.6.5
 Core and Builtins
 -----------------
 
+- Issue #7413: Passing '\0' as the separator to datetime.datetime.isoformat()
+  used to drop the time part of the result.
+
 - Issue #6108: unicode(exception) and str(exception) should return the same
   message when only __str__ (and not __unicode__) is overridden in the subclass.
 
index fcbd2e9ad2af613bc5946aa805816b8b933ce014..ee558ce12eb9a2bd0a39d76bf142c38951180201 100644 (file)
@@ -1362,21 +1362,26 @@ isoformat_date(PyDateTime_Date *dt, char buffer[], int bufflen)
        x = PyOS_snprintf(buffer, bufflen,
                          "%04d-%02d-%02d",
                          GET_YEAR(dt), GET_MONTH(dt), GET_DAY(dt));
+       assert(bufflen >= x);
        return buffer + x;
 }
 
-static void
+static char *
 isoformat_time(PyDateTime_DateTime *dt, char buffer[], int bufflen)
 {
+       int x;
        int us = DATE_GET_MICROSECOND(dt);
 
-       PyOS_snprintf(buffer, bufflen,
-                     "%02d:%02d:%02d", /* 8 characters */
-                     DATE_GET_HOUR(dt),
-                     DATE_GET_MINUTE(dt),
-                     DATE_GET_SECOND(dt));
+       x = PyOS_snprintf(buffer, bufflen,
+                         "%02d:%02d:%02d",
+                         DATE_GET_HOUR(dt),
+                         DATE_GET_MINUTE(dt),
+                         DATE_GET_SECOND(dt));
+       assert(bufflen >= x);
        if (us)
-               PyOS_snprintf(buffer + 8, bufflen - 8, ".%06d", us);
+               x += PyOS_snprintf(buffer + x, bufflen - x, ".%06d", us);
+       assert(bufflen >= x);
+       return buffer + x;
 }
 
 /* ---------------------------------------------------------------------------
@@ -4200,8 +4205,8 @@ datetime_isoformat(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
        cp = isoformat_date((PyDateTime_Date *)self, buffer, sizeof(buffer));
        assert(cp != NULL);
        *cp++ = sep;
-       isoformat_time(self, cp, sizeof(buffer) - (cp - buffer));
-       result = PyString_FromString(buffer);
+       cp = isoformat_time(self, cp, sizeof(buffer) - (cp - buffer));
+       result = PyString_FromStringAndSize(buffer, cp - buffer);
        if (result == NULL || ! HASTZINFO(self))
                return result;