#7413: Passing '\0' as the separator to datetime.datetime.isoformat()
used to drop the time part of the result.
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index 1818836..7b9e271 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -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;
 }
 
 /* ---------------------------------------------------------------------------
@@ -4211,8 +4216,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;