fix-utf8-convertedbytes-calc.txt
text/plain
Filename: fix-utf8-convertedbytes-calc.txt
Type: text/plain
Part: 0
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 60dfebb0bd..1681efc7a0 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -397,6 +397,9 @@ CopyConvertBuf(CopyFromState cstate)
(unsigned char *) cstate->raw_buf + cstate->raw_buf_len,
dstlen,
true);
+
+ereport(NOTICE, errmsg_internal("convertedbytes: %d", convertedbytes));
+
if (convertedbytes == 0)
{
/*
diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c
index b83358bc7a..26600e68ee 100644
--- a/src/backend/utils/mb/conv.c
+++ b/src/backend/utils/mb/conv.c
@@ -497,7 +497,7 @@ UtfToLocal(const unsigned char *utf, int len,
int l;
const pg_utf_to_local_combined *cp;
const unsigned char *start = utf;
- const unsigned char *cur = utf;
+ unsigned char *cur = unconstify(unsigned char *, utf);
if (!PG_VALID_ENCODING(encoding))
ereport(ERROR,
@@ -511,8 +511,6 @@ UtfToLocal(const unsigned char *utf, int len,
unsigned char b3 = 0;
unsigned char b4 = 0;
- cur = iso;
-
/* "break" cases all represent errors */
if (*utf == '\0')
break;
@@ -613,6 +611,7 @@ UtfToLocal(const unsigned char *utf, int len,
if (cp)
{
iso = store_coded_char(iso, cp->code);
+ cur += l;
continue;
}
}
@@ -631,6 +630,7 @@ UtfToLocal(const unsigned char *utf, int len,
if (converted)
{
iso = store_coded_char(iso, converted);
+ cur += l;
continue;
}
}
@@ -643,6 +643,7 @@ UtfToLocal(const unsigned char *utf, int len,
if (converted)
{
iso = store_coded_char(iso, converted);
+ cur += l;
continue;
}
}