From edcae0237fef7ff8a5d524b80ff91c697843eb01 Mon Sep 17 00:00:00 2001 From: akr Date: Fri, 22 Feb 2008 06:52:54 +0000 Subject: * encoding.c (rb_enc_mbclen): return minlen instead of 1 when a character is not found properly. * string.c (rb_enc_strlen): round up string length with fixed multibyte encoding such as UTF-32. (rb_enc_strlen_cr): ditto. (rb_str_substr): fix substring with fixed multibyte encoding. (rb_str_justify): check number of characters. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@15573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- encoding.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'encoding.c') diff --git a/encoding.c b/encoding.c index 002c0c04f..813b4b506 100644 --- a/encoding.c +++ b/encoding.c @@ -738,8 +738,10 @@ rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc) int n = ONIGENC_PRECISE_MBC_ENC_LEN(enc, (UChar*)p, (UChar*)e); if (MBCLEN_CHARFOUND_P(n) && MBCLEN_CHARFOUND_LEN(n) <= e-p) return MBCLEN_CHARFOUND_LEN(n); - else - return 1; + else { + int min = rb_enc_mbminlen(enc); + return min <= e-p ? min : e-p; + } } int -- cgit