diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2011-09-05 23:36:06 +0300 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2011-09-05 23:38:27 +0300 |
commit | a2a5ce68266d879c7acd292952adc376966622e0 (patch) | |
tree | 46180bea6bc903b77bf3bcda041944e1eb802d87 /src | |
parent | 7cb99b269667ef3d8869bc9f7681debc12c45b1d (diff) | |
download | postgresql-a2a5ce68266d879c7acd292952adc376966622e0.tar.gz postgresql-a2a5ce68266d879c7acd292952adc376966622e0.zip |
Improve "invalid byte sequence for encoding" message
It used to say
ERROR: invalid byte sequence for encoding "UTF8": 0xdb24
Change this to
ERROR: invalid byte sequence for encoding "UTF8": 0xdb 0x24
to make it clear that this is a byte sequence and not a code point.
Also fix the adjacent "character has no equivalent" message that has
the same issue.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/mb/wchar.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/backend/utils/mb/wchar.c b/src/backend/utils/mb/wchar.c index 5b0cf628fe9..f23732f01e5 100644 --- a/src/backend/utils/mb/wchar.c +++ b/src/backend/utils/mb/wchar.c @@ -1595,7 +1595,7 @@ void report_invalid_encoding(int encoding, const char *mbstr, int len) { int l = pg_encoding_mblen(encoding, mbstr); - char buf[8 * 2 + 1]; + char buf[8 * 5 + 1]; char *p = buf; int j, jlimit; @@ -1604,11 +1604,15 @@ report_invalid_encoding(int encoding, const char *mbstr, int len) jlimit = Min(jlimit, 8); /* prevent buffer overrun */ for (j = 0; j < jlimit; j++) - p += sprintf(p, "%02x", (unsigned char) mbstr[j]); + { + p += sprintf(p, "0x%02x", (unsigned char) mbstr[j]); + if (j < jlimit - 1) + p += sprintf(p, " "); + } ereport(ERROR, (errcode(ERRCODE_CHARACTER_NOT_IN_REPERTOIRE), - errmsg("invalid byte sequence for encoding \"%s\": 0x%s", + errmsg("invalid byte sequence for encoding \"%s\": %s", pg_enc2name_tbl[encoding].name, buf))); } @@ -1624,7 +1628,7 @@ report_untranslatable_char(int src_encoding, int dest_encoding, const char *mbstr, int len) { int l = pg_encoding_mblen(src_encoding, mbstr); - char buf[8 * 2 + 1]; + char buf[8 * 5 + 1]; char *p = buf; int j, jlimit; @@ -1633,11 +1637,15 @@ report_untranslatable_char(int src_encoding, int dest_encoding, jlimit = Min(jlimit, 8); /* prevent buffer overrun */ for (j = 0; j < jlimit; j++) - p += sprintf(p, "%02x", (unsigned char) mbstr[j]); + { + p += sprintf(p, "0x%02x", (unsigned char) mbstr[j]); + if (j < jlimit - 1) + p += sprintf(p, " "); + } ereport(ERROR, (errcode(ERRCODE_UNTRANSLATABLE_CHARACTER), - errmsg("character 0x%s of encoding \"%s\" has no equivalent in \"%s\"", + errmsg("character with byte sequence %s in encoding \"%s\" has no equivalent in encoding \"%s\"", buf, pg_enc2name_tbl[src_encoding].name, pg_enc2name_tbl[dest_encoding].name))); |