From dc25f85babd1b679669767b2dce09605b69e60ef Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 7 Jan 2014 15:00:55 +0900 Subject: mruby-string-utf8: UTF-8 string may contail NUL; #1646 --- mrbgems/mruby-string-ext/test/string.rb | 3 +-- mrbgems/mruby-string-utf8/src/string.c | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/mrbgems/mruby-string-ext/test/string.rb b/mrbgems/mruby-string-ext/test/string.rb index 67ed628c0..c951ea7e3 100644 --- a/mrbgems/mruby-string-ext/test/string.rb +++ b/mrbgems/mruby-string-ext/test/string.rb @@ -20,8 +20,7 @@ assert('String#dump') do end assert('String#strip') do - s = " abc " - s.strip + s = " abc " "".strip == "" and " \t\r\n\f\v".strip == "" and "\0a\0".strip == "\0a" and "abc".strip == "abc" and diff --git a/mrbgems/mruby-string-utf8/src/string.c b/mrbgems/mruby-string-utf8/src/string.c index bcf682648..fd1296d3f 100644 --- a/mrbgems/mruby-string-utf8/src/string.c +++ b/mrbgems/mruby-string-utf8/src/string.c @@ -26,7 +26,7 @@ utf8len(unsigned char* p) int i; if (*p == 0) - return 0; + return 1; len = utf8len_tab[*p]; for (i = 1; i < len; ++i) if ((p[i] & 0xc0) != 0x80) @@ -39,7 +39,8 @@ mrb_utf8_strlen(mrb_value str) { size_t total = 0; unsigned char* p = (unsigned char*) RSTRING_PTR(str); - while (*p) { + unsigned char* e = p + RSTRING_LEN(str); + while (p len8) return mrb_nil_value(); -- cgit v1.2.3