[Python-checkins] r77125 - in python/branches/release26-maint: Lib/test/test_datetime.py Misc/NEWS Modules/datetimemodule.c

amaury.forgeotdarc python-checkins at python.org
Tue Dec 29 23:39:49 CET 2009


Author: amaury.forgeotdarc
Date: Tue Dec 29 23:39:49 2009
New Revision: 77125

Log:
Merged revisions 77122 via svnmerge from 
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.
........


Modified:
   python/branches/release26-maint/   (props changed)
   python/branches/release26-maint/Lib/test/test_datetime.py
   python/branches/release26-maint/Misc/NEWS
   python/branches/release26-maint/Modules/datetimemodule.c

Modified: python/branches/release26-maint/Lib/test/test_datetime.py
==============================================================================
--- python/branches/release26-maint/Lib/test/test_datetime.py	(original)
+++ python/branches/release26-maint/Lib/test/test_datetime.py	Tue Dec 29 23:39:49 2009
@@ -1173,6 +1173,7 @@
         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")
 

Modified: python/branches/release26-maint/Misc/NEWS
==============================================================================
--- python/branches/release26-maint/Misc/NEWS	(original)
+++ python/branches/release26-maint/Misc/NEWS	Tue Dec 29 23:39:49 2009
@@ -12,6 +12,9 @@
 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.
 

Modified: python/branches/release26-maint/Modules/datetimemodule.c
==============================================================================
--- python/branches/release26-maint/Modules/datetimemodule.c	(original)
+++ python/branches/release26-maint/Modules/datetimemodule.c	Tue Dec 29 23:39:49 2009
@@ -1362,21 +1362,26 @@
 	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 @@
 	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;
 


More information about the Python-checkins mailing list