From: Tom Lane Date: Wed, 7 Dec 2016 00:52:34 +0000 (-0500) Subject: Fix unsafe assumption that struct timeval.tv_sec is a "long". X-Git-Tag: REL9_6_2~95 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=81f3c20a65e683ee235a5d3aa6146db84eb75ebf;p=postgresql Fix unsafe assumption that struct timeval.tv_sec is a "long". It typically is a "long", but it seems possible that on some platforms it wouldn't be. In any case, this silences a compiler warning on OpenBSD (cf buildfarm member curculio). While at it, use snprintf not sprintf. This format string couldn't possibly overrun the supplied buffer, but that doesn't seem like a good reason not to use the safer style. Oversight in commit f828654e1. Back-patch to 9.6 where that came in. --- diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 224ee7801c..69649290da 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -2484,8 +2484,9 @@ log_line_prefix(StringInfo buf, ErrorData *edata) saved_timeval_set = true; } - sprintf(strfbuf, "%ld.%03d", saved_timeval.tv_sec, - (int) (saved_timeval.tv_usec / 1000)); + snprintf(strfbuf, sizeof(strfbuf), "%ld.%03d", + (long) saved_timeval.tv_sec, + (int) (saved_timeval.tv_usec / 1000)); if (padding != 0) appendStringInfo(buf, "%*s", padding, strfbuf);