From f1be740a991406d7885047beb971e1ff5dbe8b71 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 31 Mar 2021 17:00:30 -0400 Subject: [PATCH] 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. --- src/interfaces/libpq/fe-trace.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) 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)); } /* -- 2.30.2