summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2002-12-18 20:19:21 (GMT)
committerTim Peters <tim.peters@gmail.com>2002-12-18 20:19:21 (GMT)
commitba873472d2a3f6cda91b13367360e1e05b7cdcbc (patch)
treeb76e091e4060f55b98a3319a224d87d318c49566 /Modules
parent72a6ddb5eedc69c67ffd03f17bc47fe35bca5ff3 (diff)
downloadcpython-ba873472d2a3f6cda91b13367360e1e05b7cdcbc.zip
cpython-ba873472d2a3f6cda91b13367360e1e05b7cdcbc.tar.gz
cpython-ba873472d2a3f6cda91b13367360e1e05b7cdcbc.tar.bz2
delta_str(): Purged last uses of sprintf (in favor of PyOS_snprintf).
Diffstat (limited to 'Modules')
-rw-r--r--Modules/datetimemodule.c35
1 files changed, 25 insertions, 10 deletions
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 @@ delta_str(PyDateTime_Delta *self)
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