delta_str():  Purged last uses of sprintf (in favor of PyOS_snprintf).
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index 5652cf4..8d24570 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -1805,27 +1805,42 @@
 	int us = GET_TD_MICROSECONDS(self);
 	int hours;
 	int minutes;
-	char buf[500];
-	int i = 0;
+	char buf[100];
+	char *pbuf = buf;
+	size_t buflen = sizeof(buf);
+	int n;
 
 	minutes = divmod(seconds, 60, &seconds);
 	hours = divmod(minutes, 60, &minutes);
 
 	if (days) {
-		i += sprintf(buf + i, "%d day%s, ", days,
-			     (days == 1 || days == -1) ? "" : "s");
-		assert(i < sizeof(buf));
+		n = PyOS_snprintf(pbuf, buflen, "%d day%s, ", days,
+				  (days == 1 || days == -1) ? "" : "s");
+		if (n < 0 || (size_t)n >= buflen)
+			goto Fail;
+		pbuf += n;
+		buflen -= (size_t)n;
 	}
 
-	i += sprintf(buf + i, "%d:%02d:%02d", hours, minutes, seconds);
-	assert(i < sizeof(buf));
+	n = PyOS_snprintf(pbuf, buflen, "%d:%02d:%02d",
+			  hours, minutes, seconds);
+	if (n < 0 || (size_t)n >= buflen)
+		goto Fail;
+	pbuf += n;
+	buflen -= (size_t)n;
 
 	if (us) {
-		i += sprintf(buf + i, ".%06d", us);
-		assert(i < sizeof(buf));
+		n = PyOS_snprintf(pbuf, buflen, ".%06d", us);
+		if (n < 0 || (size_t)n >= buflen)
+			goto Fail;
+		pbuf += n;
 	}
 
-	return PyString_FromStringAndSize(buf, i);
+	return PyString_FromStringAndSize(buf, pbuf - buf);
+
+ Fail:
+	PyErr_SetString(PyExc_SystemError, "goofy result from PyOS_snprintf");
+	return NULL;
 }
 
 /* Pickle support.  Quite a maze!  While __getstate__/__setstate__ sufficed