From: Alvaro Herrera Date: Tue, 13 Jan 2009 15:28:42 +0000 (+0000) Subject: Backpatch to 7.4 the part of 1.84 (from the 8.0 timeline) that wasn't already X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=8cb3280b1f1e97b791ac446639b80dd9d066c5a3;p=users%2Fbernd%2Fpostgres.git Backpatch to 7.4 the part of 1.84 (from the 8.0 timeline) that wasn't already patched, viz. str_numth(). The rest of that patch was already applied as part of 1.69.2.1. Per report and patch from Andreas 'ads' Scherbaum. The involved revisions were: revision 1.84 date: 2005-01-12 22:40:13 -0300; author: tgl; state: Exp; lines: +9 -7; branches: 1.84.4; Remove unportable assumption that it's okay to use the target buffer of an sprintf() as a source string. Demonstrably does not work with recent gcc and/or glibc on some platforms. and revision 1.69.2.1 date: 2005-03-25 20:42:21 -0400; author: tgl; state: Exp; lines: +24 -8; Prevent to_char(interval) from dumping core on month-related formats when a zero-month interval is given. Per discussion with Karel. --- diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index e10ce56a84..7bad202bea 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -1444,7 +1444,9 @@ get_th(char *num, int type) static char * str_numth(char *dest, char *num, int type) { - sprintf(dest, "%s%s", num, get_th(num, type)); + if (dest != num) + strcpy(dest, num); + strcat(dest, get_th(num, type)); return dest; } @@ -2097,7 +2099,6 @@ dch_date(int arg, char *inout, int suf, int flag, FormatNode *node, void *data) switch (arg) { - case DCH_A_D: case DCH_B_C: if (flag == TO_CHAR)