ruby-changes:3799
From: ko1@a...
Date: Mon, 28 Jan 2008 13:03:38 +0900 (JST)
Subject: [ruby-changes:3799] akr - Ruby:r15288 (trunk): * enc/euc_kr.c (euckr_mbc_enc_len): validation implemented.
akr 2008-01-28 13:02:39 +0900 (Mon, 28 Jan 2008)
New Revision: 15288
Modified files:
trunk/ChangeLog
trunk/enc/euc_kr.c
Log:
* enc/euc_kr.c (euckr_mbc_enc_len): validation implemented.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15288&r2=15287&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/enc/euc_kr.c?r1=15288&r2=15287&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 15287)
+++ ChangeLog (revision 15288)
@@ -1,3 +1,7 @@
+Mon Jan 28 13:02:02 2008 Tanaka Akira <akr@f...>
+
+ * enc/euc_kr.c (euckr_mbc_enc_len): validation implemented.
+
Mon Jan 28 11:24:49 2008 NAKAMURA Usaku <usa@r...>
* parse.y (parser_str_new): encoding of UTF-8 literal string in
Index: enc/euc_kr.c
===================================================================
--- enc/euc_kr.c (revision 15287)
+++ enc/euc_kr.c (revision 15288)
@@ -48,10 +48,63 @@
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
};
+typedef enum { FAILURE = -2, ACCEPT = -1, S0 = 0, S1 } state_t;
+#define A ACCEPT
+#define F FAILURE
+static const signed char trans[][0x100] = {
+ { /* S0 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* 0 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* 1 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* 2 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* 3 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* 4 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* 5 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* 6 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* 7 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* 8 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 9 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* a */ F, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ /* b */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ /* c */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ /* d */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ /* e */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ /* f */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, F
+ },
+ { /* S1 0 1 2 3 4 5 6 7 8 9 a b c d e f */
+ /* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 8 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* 9 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+ /* a */ F, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* b */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* c */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* d */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* e */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+ /* f */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, F
+ }
+};
+#undef A
+#undef F
+
static int
-euckr_mbc_enc_len(const UChar* p, const UChar* end ARG_UNUSED, OnigEncoding enc ARG_UNUSED)
+euckr_mbc_enc_len(const UChar* p, const UChar* e, OnigEncoding enc ARG_UNUSED)
{
- return EncLen_EUCKR[*p];
+ int firstbyte = *p++;
+ state_t s = trans[0][firstbyte];
+#define RETURN(n) \
+ return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) : \
+ ONIGENC_CONSTRUCT_MBCLEN_INVALID()
+ if (s < 0) RETURN(1);
+ if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_EUCKR[firstbyte]-1);
+ s = trans[s][*p++];
+ RETURN(2);
+#undef RETURN
}
static OnigCodePoint
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/