summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrbgems/mruby-string-utf8/src/string.c6
-rw-r--r--mrbgems/mruby-string-utf8/test/string.rb5
2 files changed, 8 insertions, 3 deletions
diff --git a/mrbgems/mruby-string-utf8/src/string.c b/mrbgems/mruby-string-utf8/src/string.c
index 326d79e40..2dd848c86 100644
--- a/mrbgems/mruby-string-utf8/src/string.c
+++ b/mrbgems/mruby-string-utf8/src/string.c
@@ -7,7 +7,7 @@
/* TODO: duplicate definition in src/re.h */
#define REGEXP_CLASS "Regexp"
-static size_t utf8len_tab[256] =
+static const char utf8len_codepage[256] =
{
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
@@ -16,7 +16,7 @@ static size_t utf8len_tab[256] =
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
- 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1,
+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,
};
static size_t
@@ -27,7 +27,7 @@ utf8len(unsigned char* p)
if (*p == 0)
return 1;
- len = utf8len_tab[*p];
+ len = utf8len_codepage[*p];
for (i = 1; i < len; ++i)
if ((p[i] & 0xc0) != 0x80)
return 1;
diff --git a/mrbgems/mruby-string-utf8/test/string.rb b/mrbgems/mruby-string-utf8/test/string.rb
index fc21c0a93..bfa5f0170 100644
--- a/mrbgems/mruby-string-utf8/test/string.rb
+++ b/mrbgems/mruby-string-utf8/test/string.rb
@@ -25,3 +25,8 @@ assert('String#reverse!', '15.2.10.5.30') do
assert_equal '!界世わちにんこ', a
assert_equal '!界世わちにんこ', 'こんにちわ世界!'.reverse!
end
+
+assert('Invalid sequence') do
+ assert_equal 5, "\xF8\x88\x80\x80\x80".size
+ assert_equal 6, "\xFC\x84\x80\x80\x80\x80".size
+end