From 17501079a0f797ef7b4735209d6e90698bac0854 Mon Sep 17 00:00:00 2001 From: konn Date: Thu, 20 Nov 2008 09:48:42 +0000 Subject: [PATCH] * Added illegal charactor code of SJIS * Added illegal charactor code of EUC git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/RELEASE_0_12_0@4493 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- src/chxj_encoding.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/src/chxj_encoding.c b/src/chxj_encoding.c index 570c0da6..848c27be 100644 --- a/src/chxj_encoding.c +++ b/src/chxj_encoding.c @@ -153,10 +153,70 @@ chxj_convert_illegal_charactor_sequence(request_rec *r, chxjconvrule_entry *ent *ibuf += 1; DBG(r, "passed 1byte."); } - if (ibuf && *ibuf) { - *ilen = strlen(*ibuf); - DBG(r, "new len = [%d].", *ilen); + } + else if (STRCASEEQ('e','E', "EUCJP", entryp->encoding) + || STRCASEEQ('c','C', "CSEUCPKDFMTJAPANESE", entryp->encoding) + || STRCASEEQ('e','E', "EUC-JISX0213", entryp->encoding) + || STRCASEEQ('e','E', "EUC-JP-MS", entryp->encoding) + || STRCASEEQ('e','E', "EUC-JP", entryp->encoding) + || STRCASEEQ('e','E', "EUCJP-MS", entryp->encoding) + || STRCASEEQ('e','E', "EUCJP-OPEN", entryp->encoding) + || STRCASEEQ('e','E', "EUCJP-WIN", entryp->encoding) + || STRCASEEQ('e','E', "EUCJP", entryp->encoding)) { + if ((unsigned char)**ibuf == 0x8F) { + /* 3byte charactor */ + **obuf = '?'; + *obuf += 1; + *olen -= 1; + *ibuf +=3; + DBG(r, "passed 3byte."); } + else { + /* 2byte charactor */ + **obuf = '?'; + *obuf += 1; + *olen -= 1; + *ibuf += 2; + DBG(r, "passed 2byte."); + } + } + else if (STRCASEEQ('c', 'C', "CP932", entryp->encoding) + || STRCASEEQ('c', 'C', "CSIBM932", entryp->encoding) + || STRCASEEQ('i', 'I', "IBM-932", entryp->encoding) + || STRCASEEQ('i', 'I', "IBM932", entryp->encoding) + || STRCASEEQ('m', 'M', "MS932", entryp->encoding) + || STRCASEEQ('m', 'M', "MS_KANJI", entryp->encoding) + || STRCASEEQ('s', 'S', "SJIS-OPEN", entryp->encoding) + || STRCASEEQ('s', 'S', "SJIS-WIN", entryp->encoding) + || STRCASEEQ('s', 'S', "SJIS", entryp->encoding)) { + if ( ( ((0x81 <= (unsigned char)**ibuf) && (0x9f >= (unsigned char)**ibuf)) + || ((0xe0 <= (unsigned char)**ibuf) && (0xfc >= (unsigned char)**ibuf))) + && + ( ((0x40 <= (unsigned char)*((*ibuf)+1)) && (0x7e >= (unsigned char)*((*ibuf)+1))) + ||((0x80 <= (unsigned char)*((*ibuf)+1)) && (0xfc >= (unsigned char)*((*ibuf)+1))))) { + /* 2byte charactor */ + **obuf = '?'; + *obuf += 1; + *olen -= 1; + *ibuf += 2; + DBG(r, "passed 2byte."); + } + else { + /* 1byte charactor */ + **obuf = '?'; + *obuf += 1; + *olen -= 1; + *ibuf += 1; + DBG(r, "passed 1byte."); + } + } + else { + *ilen = 0; + return; + } + if (ibuf && *ibuf) { + *ilen = strlen(*ibuf); + DBG(r, "new len = [%d].", *ilen); } } -- 2.11.0