From: Tom Lane Date: Wed, 31 Mar 2021 21:00:30 +0000 (-0400) Subject: Fix portability and safety issues in pqTraceFormatTimestamp. X-Git-Tag: REL_14_BETA1~398 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=f1be740a991406d7885047beb971e1ff5dbe8b71;p=postgresql.git Fix portability and safety issues in pqTraceFormatTimestamp. Remove confusion between time_t and pg_time_t; neither gettimeofday() nor localtime() deal in the latter. libpq indeed has no business using at all. Use snprintf not sprintf, to ensure we can't overrun the supplied buffer. (Unlikely, but let's be safe.) Per buildfarm. --- diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c index 0bfae12a450..5faeee74519 100644 --- a/src/interfaces/libpq/fe-trace.c +++ b/src/interfaces/libpq/fe-trace.c @@ -26,7 +26,6 @@ #include "libpq-fe.h" #include "libpq-int.h" -#include "pgtime.h" #include "port/pg_bswap.h" /* Enable tracing */ @@ -81,16 +80,14 @@ static void pqTraceFormatTimestamp(char *timestr, size_t ts_len) { struct timeval tval; - pg_time_t stamp_time; gettimeofday(&tval, NULL); - stamp_time = (pg_time_t) tval.tv_sec; - strftime(timestr, ts_len, "%Y-%m-%d %H:%M:%S", - localtime(&stamp_time)); + localtime(&tval.tv_sec)); /* append microseconds */ - sprintf(timestr + strlen(timestr), ".%06d", (int) (tval.tv_usec)); + snprintf(timestr + strlen(timestr), ts_len - strlen(timestr), + ".%06u", (unsigned int) (tval.tv_usec)); } /*