From 7767aadd94cd252a12fa00f6122ad4dd10455791 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 8 Oct 2018 19:15:55 -0400 Subject: Fix omissions in snprintf.c's coverage of standard *printf functions. A warning on a NetBSD box revealed to me that pg_waldump/compat.c is using vprintf(), which snprintf.c did not provide coverage for. This is not good if we want to have uniform *printf behavior, and it's pretty silly to omit when it's a one-line function. I also noted that snprintf.c has pg_vsprintf() but for some reason it was not exposed to the outside world, creating another way in which code might accidentally invoke the platform *printf family. Let's just make sure that we replace all eight of the POSIX-standard printf family. Also, upgrade plperl.h and plpython.h to make sure that they do their undefine/redefine rain dance for all eight, not some random maybe-sufficient subset thereof. --- src/pl/plpython/plpython.h | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) (limited to 'src/pl/plpython/plpython.h') diff --git a/src/pl/plpython/plpython.h b/src/pl/plpython/plpython.h index eaf3e4a154f..8cb922de724 100644 --- a/src/pl/plpython/plpython.h +++ b/src/pl/plpython/plpython.h @@ -33,8 +33,14 @@ * Sometimes python carefully scribbles on our *printf macros. * So we undefine them here and redefine them after it's done its dirty deed. */ -#undef snprintf #undef vsnprintf +#undef snprintf +#undef vsprintf +#undef sprintf +#undef vfprintf +#undef fprintf +#undef vprintf +#undef printf #if defined(_MSC_VER) && defined(_DEBUG) /* Python uses #pragma to bring in a non-default libpython on VC++ if @@ -120,15 +126,40 @@ typedef int Py_ssize_t; #include #include -/* put back our snprintf and vsnprintf */ +/* put back our *printf macros ... this must match src/include/port.h */ +#ifdef vsnprintf +#undef vsnprintf +#endif #ifdef snprintf #undef snprintf #endif -#ifdef vsnprintf -#undef vsnprintf +#ifdef vsprintf +#undef vsprintf #endif -#define vsnprintf pg_vsnprintf -#define snprintf pg_snprintf +#ifdef sprintf +#undef sprintf +#endif +#ifdef vfprintf +#undef vfprintf +#endif +#ifdef fprintf +#undef fprintf +#endif +#ifdef vprintf +#undef vprintf +#endif +#ifdef printf +#undef printf +#endif + +#define vsnprintf pg_vsnprintf +#define snprintf pg_snprintf +#define vsprintf pg_vsprintf +#define sprintf pg_sprintf +#define vfprintf pg_vfprintf +#define fprintf pg_fprintf +#define vprintf pg_vprintf +#define printf(...) pg_printf(__VA_ARGS__) /* * Used throughout, and also by the Python 2/3 porting layer, so it's easier to -- cgit v1.2.3