aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuo Ishii <ishii@postgresql.org>2006-03-04 11:10:44 +0000
committerTatsuo Ishii <ishii@postgresql.org>2006-03-04 11:10:44 +0000
commit8ccc7dfaf1719a9a48fc8aefe064fd1dbfa36eac (patch)
tree08c8a9182d55a6c8ef9f7b3ca477eae12891da86
parentcff68063de57820eb8fe9d9f730468df6bab5969 (diff)
downloadpostgresql-8ccc7dfaf1719a9a48fc8aefe064fd1dbfa36eac.tar.gz
postgresql-8ccc7dfaf1719a9a48fc8aefe064fd1dbfa36eac.zip
Tighten up SJIS byte sequence check. Now we reject invalid SJIS byte
sequence such as "0x95 0x27". Patches from Akio Ishida.
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c15
1 files changed, 14 insertions, 1 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 3b215b2c4fb..6948d19618b 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
@@ -6,7 +6,7 @@
* 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.13 2005/10/15 02:49:34 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c,v 1.13.2.1 2006/03/04 11:10:44 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)
@@ -561,6 +569,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)
{