summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2021-03-31 17:00:30 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2021-03-31 17:00:30 -0400
commitf1be740a991406d7885047beb971e1ff5dbe8b71 (patch)
treead5014a0c27149149e033a8fd8c27e431bde569b /src
parent8998e3cafa23632790787b8cc726998e84067259 (diff)
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 <pgtime.h> at all. Use snprintf not sprintf, to ensure we can't overrun the supplied buffer. (Unlikely, but let's be safe.) Per buildfarm.
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/libpq/fe-trace.c9
1 files 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));
}
/*