git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f0f46ed)
Fix psql's copy of utf2ucs() to match the backend's copy exactly;
2010年8月16日 00:06:18 +0000 (00:06 +0000)
2010年8月16日 00:06:18 +0000 (00:06 +0000)
in particular, propagate a fix in the test to see whether a UTF8 character has
length 4 bytes. This is likely of little real-world consequence because
5-or-more-byte UTF8 sequences are not supported by Postgres nor seen anywhere
in the wild, but still we may as well get it right. Problem found by Joseph
Adams.

Bug is aboriginal, so back-patch all the way.


diff --git a/src/bin/psql/mbprint.c b/src/bin/psql/mbprint.c
index b1263ea5918dbbfc3a93ebc59aabac1a172ccaa4..d46aaef544f5b92b3e6feaf4e0177f3ecba59287 100644 (file)
--- a/src/bin/psql/mbprint.c
+++ b/src/bin/psql/mbprint.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2010, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/mbprint.c,v 1.38 2010年01月02日 16:57:59 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/mbprint.c,v 1.39 2010年08月16日 00:06:18 tgl Exp $
*
* XXX this file does not really belong in psql/. Perhaps move to libpq?
* It also seems that the mbvalidate function is redundant with existing
@@ -53,28 +53,20 @@ utf2ucs(const unsigned char *c)
if ((*c & 0x80) == 0)
return (pg_wchar) c[0];
else if ((*c & 0xe0) == 0xc0)
- {
return (pg_wchar) (((c[0] & 0x1f) << 6) |
(c[1] & 0x3f));
- }
else if ((*c & 0xf0) == 0xe0)
- {
return (pg_wchar) (((c[0] & 0x0f) << 12) |
((c[1] & 0x3f) << 6) |
(c[2] & 0x3f));
- }
- else if ((*c & 0xf0) == 0xf0)
- {
+ else if ((*c & 0xf8) == 0xf0)
return (pg_wchar) (((c[0] & 0x07) << 18) |
((c[1] & 0x3f) << 12) |
((c[2] & 0x3f) << 6) |
(c[3] & 0x3f));
- }
else
- {
/* that is an invalid code on purpose */
return 0xffffffff;
- }
}
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /