From adc15cc997f3d1a3d067c77962437d291e73c1f8 Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 12 Jun 2006 13:30:32 +0000 Subject: * sprintf.c (rb_f_sprintf): adjust precision length to prevent splitting multi-byte characters. [ruby-list:42389] git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@10255 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- sprintf.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'sprintf.c') diff --git a/sprintf.c b/sprintf.c index 5e85d9522..3c0bc5cd2 100644 --- a/sprintf.c +++ b/sprintf.c @@ -13,6 +13,7 @@ **********************************************************************/ #include "ruby.h" +#include "re.h" #include #include @@ -413,6 +414,23 @@ rb_f_sprintf(argc, argv) len = prec; } } + { + char *s, *send; + long l; + + s = RSTRING(str)->ptr; + send = s + RSTRING(str)->len; + l = 0; + while (s < send) { + long n = mbclen(*s); + if (l + n > len) { + len = l; + break; + } + l += n; + s += n; + } + } if (flags&FWIDTH) { if (width > len) { CHECK(width); -- cgit