diff options
author | Tim Peters <tim.peters@gmail.com> | 2002-12-18 20:19:21 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2002-12-18 20:19:21 (GMT) |
commit | ba873472d2a3f6cda91b13367360e1e05b7cdcbc (patch) | |
tree | b76e091e4060f55b98a3319a224d87d318c49566 /Modules | |
parent | 72a6ddb5eedc69c67ffd03f17bc47fe35bca5ff3 (diff) | |
download | cpython-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.c | 35 |
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 |