protect vfprintf from hijacking by Windows gettext just like other members of the *printf family.

This commit is contained in:
Andrew Dunstan 2006-11-28 01:12:34 +00:00
parent c15de02f61
commit 796a3f373a
2 changed files with 10 additions and 3 deletions

View File

@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/port.h,v 1.105 2006/10/19 20:56:22 tgl Exp $ * $PostgreSQL: pgsql/src/include/port.h,v 1.106 2006/11/28 01:12:33 adunstan Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -145,6 +145,9 @@ extern unsigned char pg_tolower(unsigned char ch);
#ifdef sprintf #ifdef sprintf
#undef sprintf #undef sprintf
#endif #endif
#ifdef vfprintf
#undef vfprintf
#endif
#ifdef fprintf #ifdef fprintf
#undef fprintf #undef fprintf
#endif #endif
@ -161,6 +164,7 @@ extern int
pg_sprintf(char *str, const char *fmt,...) pg_sprintf(char *str, const char *fmt,...)
/* This extension allows gcc to check the format string */ /* This extension allows gcc to check the format string */
__attribute__((format(printf, 2, 3))); __attribute__((format(printf, 2, 3)));
extern int pg_vfprintf(FILE * stream, const char *fmt, va_list args);
extern int extern int
pg_fprintf(FILE *stream, const char *fmt,...) pg_fprintf(FILE *stream, const char *fmt,...)
/* This extension allows gcc to check the format string */ /* This extension allows gcc to check the format string */
@ -179,12 +183,14 @@ __attribute__((format(printf, 1, 2)));
#define vsnprintf(...) pg_vsnprintf(__VA_ARGS__) #define vsnprintf(...) pg_vsnprintf(__VA_ARGS__)
#define snprintf(...) pg_snprintf(__VA_ARGS__) #define snprintf(...) pg_snprintf(__VA_ARGS__)
#define sprintf(...) pg_sprintf(__VA_ARGS__) #define sprintf(...) pg_sprintf(__VA_ARGS__)
#define vfprintf(...) pg_vfprintf(__VA_ARGS__)
#define fprintf(...) pg_fprintf(__VA_ARGS__) #define fprintf(...) pg_fprintf(__VA_ARGS__)
#define printf(...) pg_printf(__VA_ARGS__) #define printf(...) pg_printf(__VA_ARGS__)
#else #else
#define vsnprintf pg_vsnprintf #define vsnprintf pg_vsnprintf
#define snprintf pg_snprintf #define snprintf pg_snprintf
#define sprintf pg_sprintf #define sprintf pg_sprintf
#define vfprintf pg_vfprintf
#define fprintf pg_fprintf #define fprintf pg_fprintf
#define printf pg_printf #define printf pg_printf
#endif #endif

View File

@ -31,7 +31,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* $PostgreSQL: pgsql/src/port/snprintf.c,v 1.32 2006/10/04 00:30:14 momjian Exp $ * $PostgreSQL: pgsql/src/port/snprintf.c,v 1.33 2006/11/28 01:12:34 adunstan Exp $
*/ */
#include "c.h" #include "c.h"
@ -99,6 +99,7 @@
#undef vsnprintf #undef vsnprintf
#undef snprintf #undef snprintf
#undef sprintf #undef sprintf
#undef vfprintf
#undef fprintf #undef fprintf
#undef printf #undef printf
@ -209,7 +210,7 @@ pg_sprintf(char *str, const char *fmt,...)
return len; return len;
} }
static int int
pg_vfprintf(FILE *stream, const char *fmt, va_list args) pg_vfprintf(FILE *stream, const char *fmt, va_list args)
{ {
PrintfTarget target; PrintfTarget target;