* sprintf.c (rb_str_format): should preserve format encoding

before raising CompatibilityError.  [ruby-list:46274]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24507 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2009-08-11 23:53:21 +00:00
Родитель e666111955
Коммит 5703c1756c
2 изменённых файлов: 10 добавлений и 5 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Wed Aug 12 08:39:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
* sprintf.c (rb_str_format): should preserve format encoding
before raising CompatibilityError. [ruby-list:46274]
Wed Aug 12 07:41:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
* encoding.c (rb_enc_compatible): If a string is empty and

Просмотреть файл

@ -482,6 +482,10 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
for (t = p; t < end && *t != '%'; t++) ;
PUSH(p, t - p);
if (coderange != ENC_CODERANGE_BROKEN && scanned < blen) {
scanned = rb_str_coderange_scan_restartable(buf+scanned, buf+blen, enc, &coderange);
ENC_CODERANGE_SET(result, coderange);
}
if (t >= end) {
/* end of fmt string */
goto sprint_exit;
@ -673,7 +677,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
(cr == ENC_CODERANGE_UNKNOWN ?
ENC_CODERANGE_BROKEN : (coderange = cr)));
}
enc = rb_enc_check(result, str);
enc = rb_enc_check((RSTRING_LEN(result) == 0 ? fmt : result), str);
if (flags&(FPREC|FWIDTH)) {
slen = rb_enc_strlen(RSTRING_PTR(str),RSTRING_END(str),enc);
if (slen < 0) {
@ -1055,10 +1059,6 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
if (RTEST(ruby_debug)) rb_raise(rb_eArgError, "%s", mesg);
if (RTEST(ruby_verbose)) rb_warn("%s", mesg);
}
if (scanned < blen) {
rb_str_coderange_scan_restartable(buf+scanned, buf+blen, enc, &coderange);
ENC_CODERANGE_SET(result, coderange);
}
rb_str_resize(result, blen);
if (tainted) OBJ_TAINT(result);