Commit bc2cf76a authored by Tatsuo Ishii's avatar Tatsuo Ishii

Make makeObjectName multibyte aware. Currently, it may produce

incorrect multibyte sequence while truncating too long names.
parent 88d7b4a2
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: analyze.c,v 1.154 2000/08/11 23:45:27 tgl Exp $ * $Id: analyze.c,v 1.155 2000/08/22 12:59:04 ishii Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
#include "utils/relcache.h" #include "utils/relcache.h"
#include "utils/syscache.h" #include "utils/syscache.h"
#ifdef MULTIBYTE
#include "mb/pg_wchar.h"
#endif
void CheckSelectForUpdate(Query *qry); /* no points for style... */ void CheckSelectForUpdate(Query *qry); /* no points for style... */
static Query *transformStmt(ParseState *pstate, Node *stmt); static Query *transformStmt(ParseState *pstate, Node *stmt);
...@@ -550,6 +554,13 @@ makeObjectName(char *name1, char *name2, char *typename) ...@@ -550,6 +554,13 @@ makeObjectName(char *name1, char *name2, char *typename)
name2chars--; name2chars--;
} }
#ifdef MULTIBYTE
if (name1)
name1chars = pg_mbcliplen(name1, name1chars, name1chars);
if (name2)
name2chars = pg_mbcliplen(name2, name2chars, name2chars);
#endif
/* Now construct the string using the chosen lengths */ /* Now construct the string using the chosen lengths */
name = palloc(name1chars + name2chars + overhead + 1); name = palloc(name1chars + name2chars + overhead + 1);
strncpy(name, name1, name1chars); strncpy(name, name1, name1chars);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment