summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuo Ishii <ishii@postgresql.org>2006-03-04 10:57:35 +0000
committerTatsuo Ishii <ishii@postgresql.org>2006-03-04 10:57:35 +0000
commitb3d0442ab3d6ebcf9d97c6e01cae0ba387209f0d (patch)
tree21ffd70f597bb05288795405dd090428ec4c605f /src
parent18bc9ea561ddf11248d88b1314601e9839296bb2 (diff)
Tighten up SJIS byte sequence check. Now we reject invalid SJIS byte
sequence such as "0x95 0x27". Patches from Akio Ishida. Also update copyright notice.
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c b/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c
index 2081cc4a6c6..31fb7375003 100644
--- a/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c
+++ b/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c
@@ -2,11 +2,11 @@
*
* EUC_JP, SJIS and MULE_INTERNAL
*
- * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c,v 1.14 2005/12/26 19:30:44 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c,v 1.15 2006/03/04 10:57:35 ishii Exp $
*
*-------------------------------------------------------------------------
*/
@@ -22,6 +22,9 @@
#define PGSJISALTCODE 0x81ac
#define PGEUCALTCODE 0xa2ae
+#define ISSJISHEAD(c) ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xfc))
+#define ISSJISTAIL(c) ((c >= 0x40 && c <= 0x7e) || (c >= 0x80 && c <= 0xfc))
+
/*
* conversion table between SJIS UDC (IBM kanji) and EUC_JP
*/
@@ -186,6 +189,11 @@ sjis2mic(unsigned char *sjis, unsigned char *p, int len)
* JIS X0208, X0212, user defined extended characters
*/
c2 = *sjis++;
+ if (!ISSJISHEAD(c1) || !ISSJISTAIL(c2))
+ ereport(ERROR,
+ (errcode(ERRCODE_CHARACTER_NOT_IN_REPERTOIRE),
+ errmsg("invalid byte sequence for encoding \"SJIS\": 0x%02x%02x",
+ c1, c2)));
k = (c1 << 8) + c2;
/* Eiji Tokuya patched begin */
if (k >= 0xed40 && k < 0xf040)
@@ -557,6 +565,11 @@ sjis2euc_jp(unsigned char *sjis, unsigned char *p, int len)
* JIS X0208, X0212, user defined extended characters
*/
c2 = *sjis++;
+ if (!ISSJISHEAD(c1) || !ISSJISTAIL(c2))
+ ereport(ERROR,
+ (errcode(ERRCODE_CHARACTER_NOT_IN_REPERTOIRE),
+ errmsg("invalid byte sequence for encoding \"SJIS\": 0x%02x%02x",
+ c1, c2)));
k = (c1 << 8) + c2;
if (k >= 0xed40 && k < 0xf040)
{