aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-09-03 15:00:07 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-09-03 15:00:07 +0000
commite6d6713ceb38c168d4a3b69dfb823529bb0144ef (patch)
treeef50dd87b7a0aa631f956db797379ceae3d50e6e /src
parentba91f3b1de438a1ecb9c1d0a2509795b24b244ae (diff)
downloadpostgresql-e6d6713ceb38c168d4a3b69dfb823529bb0144ef.tar.gz
postgresql-e6d6713ceb38c168d4a3b69dfb823529bb0144ef.zip
Repair problems with to_char() overrunning its input string.
From Karel Zak.
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/formatting.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index 9c2336e8e2c..fb597a10547 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -1,7 +1,7 @@
/* -----------------------------------------------------------------------
* formatting.c
*
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.56 2002/09/20 03:57:09 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.56.2.1 2003/09/03 15:00:07 tgl Exp $
*
*
* Portions Copyright (c) 1999-2002, PostgreSQL Global Development Group
@@ -1264,6 +1264,16 @@ DCH_processor(FormatNode *node, char *inout, int flag, void *data)
for (n = node, s = inout; n->type != NODE_TYPE_END; n++)
{
+ if (flag == FROM_CHAR && *s=='\0')
+ /*
+ * The input string is shorter than format picture,
+ * so it's good time to break this loop...
+ *
+ * Note: this isn't relevant for TO_CHAR mode, beacuse
+ * it use 'inout' allocated by format picture length.
+ */
+ break;
+
if (n->type == NODE_TYPE_ACTION)
{
int len;